Jest: [ОШИБКА] Jest 16 прерывает использование toHaveBeenCalledWith с 0 аргументами для проверки функций, которые были вызваны без аргументов.

Созданный на 9 окт. 2016  ·  3Комментарии  ·  Источник: facebook/jest

Вы хотите запросить _функцию_ или сообщить об _ошибке_?

Сообщить об ошибке

Каково текущее поведение?

На Jest 16: тестирование toHaveBeenCalledWith с 0 аргументами не проходит, когда шпион вызывается с 0 аргументами

На Jest 15: проверка toHaveBeenCalledWith с 0 аргументами проходит, когда шпион вызывается с 0 аргументами

Если текущее поведение является ошибкой, предоставьте шаги для воспроизведения и, если возможно, минимальный репозиторий на GitHub, который мы можем npm install и npm test .

Минимальный тест:

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

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

Репо: https://github.com/benmccormick/jest-no-args/tree/master

Каково ожидаемое поведение?

Тестирование с использованием toHaveBeenCalledWith с 0 аргументами должно проходить утверждение, когда шпион вызывается с 0 аргументами

Запустите Jest еще раз с --debug и предоставьте полную конфигурацию, которую он распечатает.

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

Версия узла: 6.7.0
Версия NPM: 3.10.7

Самый полезный комментарий

'toHaveBeenCalled' проверяет, что функция вообще вызывалась. У меня есть тест, который специально проверяет вызов функции без аргументов.

Вариант использования в реальном мире: эта функция действует на список и либо принимает идентификатор (и действует на один элемент), либо вызывается без идентификатора (и действует на весь список)

Все 3 Комментарий

Хорошо, немного погрузился. Самому сопоставителю (определенному в /Users/ben/Code/experiments/jest/packages/jest-matchers/src/spyMatchers.js ) передается второй «неопределенный» аргумент, когда в функцию не передаются никакие аргументы. Таким образом, проблема, по-видимому, глубже (я предполагаю, что вы хотите провести различие между отсутствием аргументов и явной передачей undefined).

Мне пока не ясно, где происходит передача этого аргумента, но я попытаюсь выяснить это и открыть PR, если смогу.

Обновление: я думаю, мне понадобится помощь, чтобы отследить это. В этом последнем релизе с этими сопоставителями изменилось достаточно, так что я не могу отследить, где это сломалось.

Просто из любопытства: почему бы вам не использовать toHaveBeenCalled() ?

'toHaveBeenCalled' проверяет, что функция вообще вызывалась. У меня есть тест, который специально проверяет вызов функции без аргументов.

Вариант использования в реальном мире: эта функция действует на список и либо принимает идентификатор (и действует на один элемент), либо вызывается без идентификатора (и действует на весь список)

Была ли эта страница полезной?
0 / 5 - 0 рейтинги