Jest: Modul tiruan diprioritaskan daripada node_modules

Dibuat pada 13 Okt 2016  ·  3Komentar  ·  Sumber: facebook/jest

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 .

  1. Klon https://github.com/ticky/jest-mock-bug , npm install dependensi
  2. Jalankan npm 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
  }
}

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 # 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.

Semua 3 komentar

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.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat