Jest: [BUG] Jest 16 rompe el uso de `toHaveBeenCalledWith` con 0 argumentos para probar funciones que se han llamado sin argumentos

Creado en 9 oct. 2016  ·  3Comentarios  ·  Fuente: facebook/jest

¿Desea solicitar una _función_ o informar un _error_?

Reportar un error

¿Cuál es el comportamiento actual?

En broma 16: probar toHaveBeenCalledWith con 0 argumentos no pasa cuando se llama a un espía con 0 argumentos

En Jest 15: la prueba toHaveBeenCalledWith con 0 argumentos pasa cuando se llama a un espía con 0 argumentos

Si el comportamiento actual es un error, proporcione los pasos para reproducir y, si es posible, un repositorio mínimo en GitHub que podamos npm install y npm test .

Prueba mínima:

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

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

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

¿Cuál es el comportamiento esperado?

La prueba usando toHaveBeenCalledWith con 0 argumentos debería pasar una afirmación cuando se llama a un espía con 0 argumentos

Ejecute Jest nuevamente con --debug y proporcione la configuración completa que 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.

Versión del nodo: 6.7.0
Versión de NPM: 3.10.7

Comentario más útil

'toHaveBeenCalled' verifica que la función haya sido llamada. Tengo una prueba que prueba específicamente que se llamó a una función sin argumentos.

El caso de uso del mundo real: esta función actúa en una lista y toma una identificación (y actúa en un solo elemento) o se llama sin una identificación (y actúa en toda la lista)

Todos 3 comentarios

Ok, he estado buceando un poco. Al comparador en sí mismo (definido en /Users/ben/Code/experiments/jest/packages/jest-matchers/src/spyMatchers.js ) se le pasa un segundo argumento "indefinido" cuando no se pasan argumentos a la función. Entonces, el problema es presumiblemente más profundo (supongo que desea distinguir entre ningún argumento y pasar explícitamente indefinido).

Todavía no tengo claro dónde está ocurriendo ese argumento, pero intentaré resolverlo y abrir un PR si puedo.

Actualización: creo que necesitaré ayuda para rastrear esto. Suficiente cambio con estos emparejadores durante este último lanzamiento que no puedo rastrear dónde se rompió.

Solo por curiosidad: ¿por qué no usas toHaveBeenCalled() ?

'toHaveBeenCalled' verifica que la función haya sido llamada. Tengo una prueba que prueba específicamente que se llamó a una función sin argumentos.

El caso de uso del mundo real: esta función actúa en una lista y toma una identificación (y actúa en un solo elemento) o se llama sin una identificación (y actúa en toda la lista)

¿Fue útil esta página
0 / 5 - 0 calificaciones