Вы хотите запросить _функцию_ или сообщить об _ошибке_?
Сообщить об ошибке
Каково текущее поведение?
На 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
Хорошо, немного погрузился. Самому сопоставителю (определенному в /Users/ben/Code/experiments/jest/packages/jest-matchers/src/spyMatchers.js
) передается второй «неопределенный» аргумент, когда в функцию не передаются никакие аргументы. Таким образом, проблема, по-видимому, глубже (я предполагаю, что вы хотите провести различие между отсутствием аргументов и явной передачей undefined).
Мне пока не ясно, где происходит передача этого аргумента, но я попытаюсь выяснить это и открыть PR, если смогу.
Обновление: я думаю, мне понадобится помощь, чтобы отследить это. В этом последнем релизе с этими сопоставителями изменилось достаточно, так что я не могу отследить, где это сломалось.
Просто из любопытства: почему бы вам не использовать toHaveBeenCalled()
?
'toHaveBeenCalled' проверяет, что функция вообще вызывалась. У меня есть тест, который специально проверяет вызов функции без аргументов.
Вариант использования в реальном мире: эта функция действует на список и либо принимает идентификатор (и действует на один элемент), либо вызывается без идентификатора (и действует на весь список)
Самый полезный комментарий
'toHaveBeenCalled' проверяет, что функция вообще вызывалась. У меня есть тест, который специально проверяет вызов функции без аргументов.
Вариант использования в реальном мире: эта функция действует на список и либо принимает идентификатор (и действует на один элемент), либо вызывается без идентификатора (и действует на весь список)