Jest: [BUG] Jest 16 فواصل باستخدام `toHaveBeenCalledWith` مع 0 وسيطات لاختبار الدوال التي تم استدعاؤها بدون وسيطات

تم إنشاؤها على ٩ أكتوبر ٢٠١٦  ·  3تعليقات  ·  مصدر: facebook/jest

هل ترغب في طلب _ ميزة _ أو الإبلاغ عن _ خطأ _؟

الإبلاغ عن خطأ

ما هو السلوك الحالي؟

في 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

التعليق الأكثر فائدة

يتحقق "toHaveBeenCalled" من استدعاء الوظيفة أصلاً. لدي اختبار يختبر على وجه التحديد استدعاء دالة بدون أي وسيطات.

حالة استخدام العالم الحقيقي: تعمل هذه الوظيفة في قائمة ، وتأخذ إما معرفًا (وتعمل على عنصر واحد) أو يتم استدعاؤها بدون معرف (وتعمل في القائمة بأكملها)

ال 3 كومينتر

حسنًا ، لقد تم الغوص قليلاً. المطابق نفسه (المحدد في /Users/ben/Code/experiments/jest/packages/jest-matchers/src/spyMatchers.js ) يتم تمرير وسيطة ثانية "غير محددة" عندما لا يتم تمرير أي وسيطات إلى الوظيفة. لذا من المفترض أن تكون المشكلة أعمق (أعتقد أنك تريد التمييز بين عدم وجود حجج والتمرير بشكل صريح غير محدد).

لست واضحًا بعد بشأن مكان حدوث هذه الحجة ، لكنني سأحاول معرفة ذلك وفتح العلاقات العامة إذا كان ذلك ممكنًا

تحديث: أعتقد أنني سأحتاج إلى بعض المساعدة لتعقب ذلك. لقد تغيرت بما فيه الكفاية مع هؤلاء المطابقات خلال هذا الإصدار الأخير بحيث لا يمكنني تتبع مكان حدوث هذا.

فقط من باب الفضول: لماذا لا تستخدم toHaveBeenCalled() ؟

يتحقق "toHaveBeenCalled" من استدعاء الوظيفة أصلاً. لدي اختبار يختبر على وجه التحديد استدعاء دالة بدون أي وسيطات.

حالة استخدام العالم الحقيقي: تعمل هذه الوظيفة في قائمة ، وتأخذ إما معرفًا (وتعمل على عنصر واحد) أو يتم استدعاؤها بدون معرف (وتعمل في القائمة بأكملها)

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات