Jest: [BUG] Jest 16 bricht mit `toHaveBeenCalledWith` mit 0 Argumenten ab, um auf Funktionen zu testen, die ohne Argumente aufgerufen wurden

Erstellt am 9. Okt. 2016  ·  3Kommentare  ·  Quelle: facebook/jest

Möchten Sie ein _Feature_ anfordern oder einen _Bug_ melden?

Melde einen technischen Fehler

Wie ist das aktuelle Verhalten?

Auf Jest 16: Das Testen toHaveBeenCalledWith mit 0 Argumenten wird nicht bestanden, wenn ein Spion mit 0 Argumenten aufgerufen wird

Auf Jest 15: Das Testen toHaveBeenCalledWith mit 0 Argumenten ist erfolgreich, wenn ein Spion mit 0 Argumenten aufgerufen wird

Wenn das aktuelle Verhalten ein Fehler ist, geben Sie bitte die Schritte zum Reproduzieren und wenn möglich ein minimales Repository auf GitHub an, das wir npm install und npm test können.

Minimaltest:

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

Was ist das erwartete Verhalten?

Beim Testen mit toHaveBeenCalledWith mit 0 Argumenten sollte eine Assertion übergeben werden, wenn ein Spion mit 0 Argumenten aufgerufen wird

Führen Sie Jest erneut mit --debug aus und geben Sie die vollständige Konfiguration an, die es ausdruckt.

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

Knotenversion: 6.7.0
NPM-Version: 3.10.7

Hilfreichster Kommentar

'toHaveBeenCalled' prüft, ob die Funktion überhaupt aufgerufen wurde. Ich habe einen Test, der speziell eine Funktion testet, die ohne Argumente aufgerufen wurde.

Der Anwendungsfall in der realen Welt: Diese Funktion agiert auf einer Liste und nimmt entweder eine ID (und agiert auf ein einzelnes Element) oder wird ohne eine ID aufgerufen (und agiert auf der gesamten Liste).

Alle 3 Kommentare

Ok, habe ein bisschen getaucht. Dem Matcher selbst (definiert in /Users/ben/Code/experiments/jest/packages/jest-matchers/src/spyMatchers.js ) wird ein zweites "undefiniertes" Argument übergeben, wenn keine Argumente an die Funktion übergeben werden. Das Problem liegt also vermutlich tiefer (ich vermute, Sie möchten zwischen keinen Argumenten und der expliziten Übergabe von undefined unterscheiden).

Mir ist noch nicht klar, wo diese Auseinandersetzung stattfindet, aber ich werde versuchen, es herauszufinden und eine PR zu eröffnen, wenn ich kann

Update: Ich glaube, ich brauche etwas Hilfe, um das herauszufinden. Mit diesen Matchern hat sich während dieser letzten Veröffentlichung genug geändert, sodass ich nicht mehr nachvollziehen kann, wo das kaputt gegangen ist.

Nur aus Neugier: Warum verwendest du nicht toHaveBeenCalled() ?

'toHaveBeenCalled' prüft, ob die Funktion überhaupt aufgerufen wurde. Ich habe einen Test, der speziell eine Funktion testet, die ohne Argumente aufgerufen wurde.

Der Anwendungsfall in der realen Welt: Diese Funktion agiert auf einer Liste und nimmt entweder eine ID (und agiert auf ein einzelnes Element) oder wird ohne eine ID aufgerufen (und agiert auf der gesamten Liste).

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen