هل ترغب في طلب _ ميزة _ أو الإبلاغ عن _ خطأ _؟
الإبلاغ عن خطأ
ما هو السلوك الحالي؟
في Jest 16: اختبار toHaveBeenCalledWith
مع 0 وسيط لا يمر عندما يتم استدعاء جاسوس مع 0 وسيطة
في Jest 15: اختبار toHaveBeenCalledWith
بدون وسيط يمر عندما يتم استدعاء جاسوس بدون وسيط
إذا كان السلوك الحالي عبارة عن خطأ ، فالرجاء تقديم خطوات إعادة الإنتاج وإذا أمكن الحد الأدنى من المستودع على 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
) يتم تمرير وسيطة ثانية "غير محددة" عندما لا يتم تمرير أي وسيطات إلى الوظيفة. لذا من المفترض أن تكون المشكلة أعمق (أعتقد أنك تريد التمييز بين عدم وجود حجج والتمرير بشكل صريح غير محدد).
لست واضحًا بعد بشأن مكان حدوث هذه الحجة ، لكنني سأحاول معرفة ذلك وفتح العلاقات العامة إذا كان ذلك ممكنًا
تحديث: أعتقد أنني سأحتاج إلى بعض المساعدة لتعقب ذلك. لقد تغيرت بما فيه الكفاية مع هؤلاء المطابقات خلال هذا الإصدار الأخير بحيث لا يمكنني تتبع مكان حدوث هذا.
فقط من باب الفضول: لماذا لا تستخدم toHaveBeenCalled()
؟
يتحقق "toHaveBeenCalled" من استدعاء الوظيفة أصلاً. لدي اختبار يختبر على وجه التحديد استدعاء دالة بدون أي وسيطات.
حالة استخدام العالم الحقيقي: تعمل هذه الوظيفة في قائمة ، وتأخذ إما معرفًا (وتعمل على عنصر واحد) أو يتم استدعاؤها بدون معرف (وتعمل في القائمة بأكملها)
التعليق الأكثر فائدة
يتحقق "toHaveBeenCalled" من استدعاء الوظيفة أصلاً. لدي اختبار يختبر على وجه التحديد استدعاء دالة بدون أي وسيطات.
حالة استخدام العالم الحقيقي: تعمل هذه الوظيفة في قائمة ، وتأخذ إما معرفًا (وتعمل على عنصر واحد) أو يتم استدعاؤها بدون معرف (وتعمل في القائمة بأكملها)