_feature_をリクエストしますか、それとも_bug_を報告しますか?
バグを報告
現在の動作は何ですか?
Jest 16の場合:0引数でスパイが呼び出された場合、0引数でtoHaveBeenCalledWith
をテストしても合格しません
Jest 15の場合:0引数でスパイが呼び出された場合、0引数でtoHaveBeenCalledWith
をテストすると合格します
現在の動作がバグである場合は、再現する手順と、可能であればGitHubにnpm install
とnpm test
の最小限のリポジトリを提供してください。
最小限のテスト:
it('can check that a function is called without arguments', () => {
let fn = jasmine.createSpy();
fn();
expect(fn).toHaveBeenCalledWith();
});
リポジトリ: https ://github.com/benmccormick/jest-no-args/tree/master
期待される動作は何ですか?
引数が0のtoHaveBeenCalledWith
を使用したテストでは、引数が0のスパイが呼び出されたときにアサーションを渡す必要があります
--debug
を使用してJestを再度実行し、印刷する完全な構成を提供します。
> node_modules/.bin/jest --debug
jest version = 16.0.1
test framework = jasmine2
config = {
"rootDir": "/Users/ben/Code/experiments/jest-no-args",
"name": "-Users-ben-Code-experiments-jest-no-args",
"setupFiles": [],
"testRunner": "/Users/ben/Code/experiments/jest-no-args/node_modules/jest-jasmine2/build/index.js",
"scriptPreprocessor": "/Users/ben/Code/experiments/jest-no-args/node_modules/babel-jest/build/index.js",
"usesBabelJest": true,
"automock": false,
"bail": false,
"browser": false,
"cacheDirectory": "/var/folders/wy/1r3js80s60q497r_lrjyb0bh0000gn/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/ben/Code/experiments/jest-no-args"
],
"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
}
}
FAIL __tests__/test.js
● can check that a function is called without arguments
expect(spy).toHaveBeenCalledWith(expected)
Expected spy to have been called with:
[undefined]
But it was called with:
Array []
at Object.<anonymous>.it (__tests__/test.js:6:16)
at process._tickCallback (internal/process/next_tick.js:103:7)
✕ can check that a function is called without arguments (5ms)
Test Suites: 1 failed, 1 total
Tests: 1 failed, 1 total
Snapshots: 0 total
Time: 0.822s
Ran all test suites.
ノードバージョン:6.7.0
NPMバージョン:3.10.7
さて、少しダイビングをしています。 関数に引数が渡されない場合、マッチャー自体( /Users/ben/Code/experiments/jest/packages/jest-matchers/src/spyMatchers.js
で定義)には2番目の「未定義」引数が渡されます。 したがって、問題はおそらくより深刻です(引数がないことと、未定義を明示的に渡すことを区別したいと思います)。
その議論の通過がどこで起こっているのかはまだはっきりしていませんが、可能であればそれを理解してPRを開こうとします
更新:これを追跡するには、いくつかの助けが必要だと思います。 この最後のリリース中にこれらのマッチャーで十分に変更されたため、これがどこで壊れたかを追跡することはできません。
好奇心から: toHaveBeenCalled()
を使ってみませんか?
'toHaveBeenCalled'は、関数がまったく呼び出されたことを確認します。 関数が引数なしで呼び出されたことを具体的にテストするテストがあります。
実際のユースケース:この関数はリストに作用し、IDを取得する(そして単一のアイテムに作用する)か、IDなしで呼び出される(そしてリスト全体に作用する)
最も参考になるコメント
'toHaveBeenCalled'は、関数がまったく呼び出されたことを確認します。 関数が引数なしで呼び出されたことを具体的にテストするテストがあります。
実際のユースケース:この関数はリストに作用し、IDを取得する(そして単一のアイテムに作用する)か、IDなしで呼び出される(そしてリスト全体に作用する)