Jest: [BUG] Jest 16 istirahat menggunakan `toHaveBeenCalledWith` dengan 0 argumen untuk menguji fungsi yang telah dipanggil tanpa argumen

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

Apakah Anda ingin meminta _fitur_ atau melaporkan _bug_?

Laporkan bug

Apa perilaku saat ini?

Pada Jest 16: menguji toHaveBeenCalledWith dengan 0 argumen tidak lulus ketika mata-mata dipanggil dengan 0 argumen

Pada Jest 15: menguji toHaveBeenCalledWith dengan 0 argumen berlalu ketika mata-mata dipanggil dengan 0 argumen

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 .

Tes minimal:

it('can check that a function is called without arguments', () => {
    let fn = jasmine.createSpy();

    fn();
    expect(fn).toHaveBeenCalledWith();
});

Repo: https://github.com/benmccormick/jest-no-args/tree/master

Apa perilaku yang diharapkan?

Pengujian menggunakan toHaveBeenCalledWith dengan 0 argumen harus memberikan pernyataan ketika mata-mata dipanggil dengan 0 argumen

Jalankan Jest lagi dengan --debug dan berikan konfigurasi lengkap yang dicetaknya.

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

Versi Simpul: 6.7.0
Versi NPM: 3.10.7

Komentar yang paling membantu

'toHaveBeenCalled' memeriksa apakah fungsi tersebut dipanggil sama sekali. Saya memiliki tes yang secara khusus menguji fungsi yang dipanggil tanpa argumen.

Kasus penggunaan dunia nyata: Fungsi ini bekerja pada daftar, dan mengambil id (dan bertindak pada satu item) atau dipanggil tanpa id (dan bertindak di seluruh daftar)

Semua 3 komentar

Ok, sudah menyelam sedikit. Pencocokan itu sendiri (didefinisikan dalam /Users/ben/Code/experiments/jest/packages/jest-matchers/src/spyMatchers.js ) dilewatkan argumen "tidak terdefinisi" kedua ketika tidak ada argumen yang diteruskan ke dalam fungsi. Jadi masalahnya mungkin lebih dalam (saya kira Anda ingin membedakan antara tidak ada argumen dan secara eksplisit melewati tidak terdefinisi).

Saya belum jelas di mana argumen itu terjadi, tetapi akan mencoba mencari tahu dan membuka PR jika saya bisa

Pembaruan: Saya pikir saya perlu bantuan untuk melacak ini. Cukup berubah dengan korek api ini selama rilis terakhir ini sehingga saya tidak dapat melacak di mana ini rusak.

Hanya ingin tahu: mengapa Anda tidak menggunakan toHaveBeenCalled() ?

'toHaveBeenCalled' memeriksa apakah fungsi tersebut dipanggil sama sekali. Saya memiliki tes yang secara khusus menguji fungsi yang dipanggil tanpa argumen.

Kasus penggunaan dunia nyata: Fungsi ini bekerja pada daftar, dan mengambil id (dan bertindak pada satu item) atau dipanggil tanpa id (dan bertindak di seluruh daftar)

Apakah halaman ini membantu?
0 / 5 - 0 peringkat