Jest: [BUG] Jest 16 utilise `toHaveBeenCalledWith` avec 0 arguments pour tester les fonctions qui ont été appelées sans arguments

Créé le 9 oct. 2016  ·  3Commentaires  ·  Source: facebook/jest

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

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)

Tous les 3 commentaires

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)

Cette page vous a été utile?
0 / 5 - 0 notes