Jest: [BUG]引数なしで呼び出された関数をテストするために0個の引数を持つ `toHaveBeenCalledWith`を使用してJest16が中断します

作成日 2016年10月09日  ·  3コメント  ·  ソース: facebook/jest

_feature_をリクエストしますか、それとも_bug_を報告しますか?

バグを報告

現在の動作は何ですか?

Jest 16の場合:0引数でスパイが呼び出された場合、0引数でtoHaveBeenCalledWithをテストしても合格しません

Jest 15の場合:0引数でスパイが呼び出された場合、0引数でtoHaveBeenCalledWithをテストすると合格します

現在の動作がバグである場合は、再現する手順と、可能であればGitHubにnpm installnpm 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

最も参考になるコメント

'toHaveBeenCalled'は、関数がまったく呼び出されたことを確認します。 関数が引数なしで呼び出されたことを具体的にテストするテストがあります。

実際のユースケース:この関数はリストに作用し、IDを取得する(そして単一のアイテムに作用する)か、IDなしで呼び出される(そしてリスト全体に作用する)

全てのコメント3件

さて、少しダイビングをしています。 関数に引数が渡されない場合、マッチャー自体( /Users/ben/Code/experiments/jest/packages/jest-matchers/src/spyMatchers.jsで定義)には2番目の「未定義」引数が渡されます。 したがって、問題はおそらくより深刻です(引数がないことと、未定義を明示的に渡すことを区別したいと思います)。

その議論の通過がどこで起こっているのかはまだはっきりしていませんが、可能であればそれを理解してPRを開こうとします

更新:これを追跡するには、いくつかの助けが必要だと思います。 この最後のリリース中にこれらのマッチャーで十分に変更されたため、これがどこで壊れたかを追跡することはできません。

好奇心から: toHaveBeenCalled()を使ってみませんか?

'toHaveBeenCalled'は、関数がまったく呼び出されたことを確認します。 関数が引数なしで呼び出されたことを具体的にテストするテストがあります。

実際のユースケース:この関数はリストに作用し、IDを取得する(そして単一のアイテムに作用する)か、IDなしで呼び出される(そしてリスト全体に作用する)

このページは役に立ちましたか?
0 / 5 - 0 評価