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