Apakah Anda ingin meminta _fitur_ atau melaporkan _bug_?
Laporkan bug.
Apa perilaku saat ini?
Jika sebuah proyek memiliki ketergantungan pada modul dengan nama yang sama sebagai file internal dengan tiruan, implementasi tiruan tersebut diambil untuk permintaan modul global, alih-alih modul global, yang memerlukan pelepasan eksplisit (yang kemudian mencetak peringatan, meskipun menunjukkan perubahan nyata dalam perilaku).
Jika perilaku saat ini adalah bug, berikan langkah-langkah untuk mereproduksi dan jika mungkin repositori minimal di GitHub yang dapat kami npm install
dan npm test
.
npm install
dependensinpm test
Tes yang diharapkan dapat mengimpor modul global ( with no explicit opt-out › globalPad should not be a mock function
) gagal karena modul yang dikembalikan sebenarnya adalah tiruan manual.
(Perhatikan bahwa left-pad
digunakan di sini karena ini adalah modul kecil tanpa persyaratan kompilasi.)
Apa perilaku yang diharapkan?
Pernyataan impor harus mengembalikan modul global, seperti halnya di explicit-opt-out.js
Jalankan Jest lagi dengan --debug
dan berikan konfigurasi lengkap yang dicetaknya.
jest version = 16.0.1
test framework = jasmine2
config = {
"rootDir": "/Users/jessica/Repositories/jest-mock-bug",
"name": "-Users-jessica-Repositories-jest-mock-bug",
"setupFiles": [],
"testRunner": "/Users/jessica/Repositories/jest-mock-bug/node_modules/jest-jasmine2/build/index.js",
"scriptPreprocessor": "/Users/jessica/Repositories/jest-mock-bug/node_modules/babel-jest/build/index.js",
"usesBabelJest": true,
"automock": false,
"bail": false,
"browser": false,
"cacheDirectory": "/var/folders/rl/98bml8qx57n3b6xgsgyvbxtr0000gn/T/jest",
"clearMocks": false,
"coveragePathIgnorePatterns": [
"/node_modules/"
],
"coverageReporters": [
"json",
"text",
"lcov",
"clover"
],
"globals": {},
"haste": {
"providesModuleNodeModules": []
},
"mocksPattern": "__mocks__",
"moduleDirectories": [
"node_modules"
],
"moduleFileExtensions": [
"js",
"json",
"jsx",
"node"
],
"moduleNameMapper": {},
"modulePathIgnorePatterns": [],
"noStackTrace": false,
"notify": false,
"preset": null,
"preprocessorIgnorePatterns": [
"/node_modules/"
],
"resetModules": false,
"testEnvironment": "jest-environment-jsdom",
"testPathDirs": [
"/Users/jessica/Repositories/jest-mock-bug"
],
"testPathIgnorePatterns": [
"/node_modules/"
],
"testRegex": "(/__tests__/.*|\\.(test|spec))\\.jsx?$",
"testURL": "about:blank",
"timers": "real",
"useStderr": false,
"verbose": null,
"watch": false,
"cache": true,
"watchman": true,
"testcheckOptions": {
"times": 100,
"maxSize": 200
}
}
Saya pikir kasus ini mirip dengan apa yang terjadi di proyek saya
Dalam kasus saya, saya punya <rootDir>/__mocks__/left-pad.js
. Semua tes yang mengimpor left-pad
akan secara otomatis mengimpor left-pad
diejek meskipun saya tidak secara eksplisit memanggil jest.mock('left-pad')
Solusi saya saat ini secara eksplisit mengejek dan kemudian secara eksplisit menghapusnya. Ini jelek, tapi berhasil
jest.mock('left-pad');
jest.unmock('left-pad');
Terima kasih! Itu solusi yang lebih bersih daripada saya, meskipun masih jelas tidak ideal!
Ya, ejekan manual lebih diutamakan daripada modul simpul. Sistem ejekan manual agak samar. Untuk saat ini, kami menghapus peringatan di rilis berikutnya, jadi Anda hanya perlu jest.unmock('left-pad')
. Lihat # 2022
Satu ide yang kami miliki adalah membuat sistem terpisah untuk tiruan modul simpul manual tetapi itu kemungkinan harus dibahas dalam proposal terpisah, jadi saya akan menutup masalah ini.
Komentar yang paling membantu
Ya, ejekan manual lebih diutamakan daripada modul simpul. Sistem ejekan manual agak samar. Untuk saat ini, kami menghapus peringatan di rilis berikutnya, jadi Anda hanya perlu
jest.unmock('left-pad')
. Lihat # 2022Satu ide yang kami miliki adalah membuat sistem terpisah untuk tiruan modul simpul manual tetapi itu kemungkinan harus dibahas dalam proposal terpisah, jadi saya akan menutup masalah ini.