Voulez-vous demander une _fonctionnalité_ ou signaler un _bug_ ?
Signaler un bug
Quel est le comportement actuel ?
Sur Jest 16 : tester toHaveBeenCalledWith
avec 0 arguments ne passe pas lorsqu'un espion est appelé avec 0 arguments
Sur Jest 15 : le test toHaveBeenCalledWith
avec 0 arguments passe lorsqu'un espion est appelé avec 0 arguments
Si le comportement actuel est un bogue, veuillez fournir les étapes à reproduire et si possible un référentiel minimal sur GitHub que nous pouvons npm install
et npm test
.
Essai minimal :
it('can check that a function is called without arguments', () => {
let fn = jasmine.createSpy();
fn();
expect(fn).toHaveBeenCalledWith();
});
Dépôt : https://github.com/benmccormick/jest-no-args/tree/master
Quel est le comportement attendu ?
Tester en utilisant toHaveBeenCalledWith
avec 0 arguments devrait passer une assertion lorsqu'un espion est appelé avec 0 arguments
Exécutez à nouveau Jest avec --debug
et fournissez la configuration complète qu'il imprime.
> 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.
Version du nœud : 6.7.0
Version NPM : 3.10.7
Ok, j'ai plongé un peu. Le matcher lui-même (défini dans /Users/ben/Code/experiments/jest/packages/jest-matchers/src/spyMatchers.js
) reçoit un deuxième argument "undefined" lorsqu'aucun argument n'est passé dans la fonction. Le problème est donc probablement plus profond (je suppose que vous voulez faire la distinction entre aucun argument et passer explicitement undefined).
Je ne sais pas encore où se passe cet argument, mais j'essaierai de le comprendre et d'ouvrir un PR si je peux
Mise à jour : je pense que j'aurai besoin d'aide pour retrouver cela. Assez changé avec ces matchers au cours de cette dernière version pour que je ne puisse pas retracer où cela a éclaté.
Juste par curiosité : pourquoi n'utilisez-vous pas toHaveBeenCalled()
?
'toHaveBeenCalled' vérifie que la fonction a été appelée. J'ai un test qui teste spécifiquement une fonction appelée sans arguments.
Le cas d'utilisation du monde réel : cette fonction agit sur une liste et prend un identifiant (et agit sur un seul élément) ou est appelée sans identifiant (et agit sur toute la liste)
Commentaire le plus utile
'toHaveBeenCalled' vérifie que la fonction a été appelée. J'ai un test qui teste spécifiquement une fonction appelée sans arguments.
Le cas d'utilisation du monde réel : cette fonction agit sur une liste et prend un identifiant (et agit sur un seul élément) ou est appelée sans identifiant (et agit sur toute la liste)