_feature_をリクエストしますか、それとも_bug_を報告しますか?
バグを報告。
現在の動作は何ですか?
プロジェクトがモック付きの内部ファイルと同じ名前のモジュールに依存している場合、そのモック実装は、グローバルモジュールではなく、グローバルモジュールのリクエストに対して取得され、明示的なモック解除が必要になります(これにより、警告が表示されますが、行動の具体的な変化を表示する)。
現在の動作がバグである場合は、再現する手順と、可能であればGitHubにnpm install
とnpm test
最小限のリポジトリを提供してください。
npm install
依存関係npm test
実行します返されたモジュールは実際には手動のモックであるため、グローバルモジュール( with no explicit opt-out › globalPad should not be a mock function
)をインポートできることを期待するテストは失敗します。
(ここでは、コンパイル要件のない小さなモジュールであるため、 left-pad
が使用されていることに注意してください。)
期待される動作は何ですか?
importステートメントは、 explicit-opt-out.js
場合と同様に、グローバルモジュールを返す必要があります。
--debug
を使用してJestを再度実行し、印刷する完全な構成を提供します。
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
}
}
このケースは私のプロジェクトで起こっていることと似ていると思います
私の場合、 <rootDir>/__mocks__/left-pad.js
ます。 jest.mock('left-pad')
明示的に呼び出さなかった場合でも、 left-pad
をインポートするすべてのテストは、モックされたleft-pad
を自動的にインポートします。
私の現在の回避策は、明示的にモックを作成してから、明示的にモックを解除することです。 醜いですが、うまくいきます
jest.mock('left-pad');
jest.unmock('left-pad');
ああ、ありがとう! それはまだ絶対に理想的ではありませんが、それは私のものよりもクリーンな回避策です!
はい、手動モックはノードモジュールよりも優先されます。 手動モックシステムは少し大ざっぱです。 今のところ、次のリリースで警告を削除するので、必要なのはjest.unmock('left-pad')
だけです。 #2022を参照
私たちが持っていたアイデアの1つは、手動ノードモジュールモック用に別のシステムを作成することでしたが、それは別の提案で議論される可能性が高いので、この問題を締めくくります。
最も参考になるコメント
はい、手動モックはノードモジュールよりも優先されます。 手動モックシステムは少し大ざっぱです。 今のところ、次のリリースで警告を削除するので、必要なのは
jest.unmock('left-pad')
だけです。 #2022を参照私たちが持っていたアイデアの1つは、手動ノードモジュールモック用に別のシステムを作成することでしたが、それは別の提案で議論される可能性が高いので、この問題を締めくくります。