Jest: ستفشل بعض الاختبارات التي تم اجتيازها عند استخدام علامة --coverage

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

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

حشرة

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

تنفيذ npm test اجتاز جميع الاختبارات ؛ ومع ذلك ، يؤدي تنفيذ npm test -- --coverage إلى فشل بعض الاختبارات.

إذا كان السلوك الحالي عبارة عن خطأ ، فالرجاء تقديم خطوات إعادة الإنتاج وإذا أمكن الحد الأدنى من المستودع على GitHub بحيث يمكننا npm install و npm test .

لدي مشروع يحتوي على عدد من مكونات التفاعل التي أختبرها باستخدام المزاح والإنزيم. لقد نقلتنا مؤخرًا من [email protected] إلى [email protected] و [email protected] إلى [email protected] . لقد قمت بتنظيف دليل node_modules قبل تثبيت الإصدارات الأحدث.

أجري npm test وقد npm test -- --coverage ، تفشل بعض الاختبارات ويتم إنشاء تقرير التغطية.

يبدو أن جميع الإخفاقات تدور حول أحد المكونات التي يتم تقديمها بسطح مع إنزيم ثم استخدام find(selector) للعثور على العقد في شجرة العرض. تم العثور على العقد بنجاح خلال jest ، لكنها فشلت عند jest --coverage .

قبل الترقية ، تم اجتياز جميع الاختبارات jest و jest --coverage .

الريبو: https://github.com/nsand/jest-coverage

ما هو السلوك المتوقع؟

أتوقع أن جميع الاختبارات تجتاز كلا الإعدامات.

قم بتشغيل Jest مرة أخرى بـ --debug وقدم التكوين الكامل الذي تطبعه.

node @ v6.9.1
npm @3.10.8
OS macOS Sierra

jest version = 17.0.3
test framework = jasmine2
config = {
  "coverageDirectory": "/Users/dev/workspaces/component-project/.gh-pages/coverage",
  "moduleNameMapper": [
    [
      "^.+\\.(scss)$",
      "/Users/dev/workspaces/component-project/lib/styleMock.js"
    ]
  ],
  "rootDir": "/Users/dev/workspaces/component-project",
  "name": "-Users-dev-workspaces-component-project",
  "setupFiles": [
    "/Users/dev/workspaces/component-project/node_modules/babel-polyfill/lib/index.js"
  ],
  "testRunner": "/Users/dev/workspaces/component-project/node_modules/jest-jasmine2/build/index.js",
  "transform": [
    [
      "^.+\\.jsx?$",
      "/Users/dev/workspaces/component-project/node_modules/babel-jest/build/index.js"
    ]
  ],
  "usesBabelJest": true,
  "automock": false,
  "bail": false,
  "browser": false,
  "cacheDirectory": "/var/folders/46/446113_55dgdfk3jsptqtd2c0000gn/T/jest",
  "coveragePathIgnorePatterns": [
    "/node_modules/"
  ],
  "coverageReporters": [
    "json",
    "text",
    "lcov",
    "clover"
  ],
  "expand": false,
  "globals": {},
  "haste": {
    "providesModuleNodeModules": []
  },
  "mocksPattern": "__mocks__",
  "moduleDirectories": [
    "node_modules"
  ],
  "moduleFileExtensions": [
    "js",
    "json",
    "jsx",
    "node"
  ],
  "modulePathIgnorePatterns": [],
  "noStackTrace": false,
  "notify": false,
  "preset": null,
  "resetMocks": false,
  "resetModules": false,
  "snapshotSerializers": [],
  "testEnvironment": "jest-environment-jsdom",
  "testPathDirs": [
    "/Users/dev/workspaces/component-project"
  ],
  "testPathIgnorePatterns": [
    "/node_modules/"
  ],
  "testRegex": "(/__tests__/.*|\\.(test|spec))\\.jsx?$",
  "testURL": "about:blank",
  "timers": "real",
  "transformIgnorePatterns": [
    "/node_modules/"
  ],
  "useStderr": false,
  "verbose": null,
  "watch": false,
  "collectCoverage": true,
  "cache": false,
  "watchman": true
}
Confirmed

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

يجب أن تؤدي إضافة displayName إلى مكوناتك إلى إصلاحه 😄

يلتف Istanbul على وظائف مع وظائف مجهولة أخرى ونأخذ اسم الوظيفة الذي تعطيه العقدة للمكوِّن المُنتج :( -cpojer https://github.com/facebook/jest/issues/1824#issuecomment -250376673

nsand : على سبيل المثال ، Icon كما يلي:

import React from 'react';

const Icon = ({ name }) => (
  <i className={`fa-icon fa-icon--${name}`}></i>
);

Icon.displayName = 'Icon';

export default Icon;

ال 3 كومينتر

@ dmitriiabramov أي أفكار حول لماذا يحدث هذا؟

يجب أن تؤدي إضافة displayName إلى مكوناتك إلى إصلاحه 😄

يلتف Istanbul على وظائف مع وظائف مجهولة أخرى ونأخذ اسم الوظيفة الذي تعطيه العقدة للمكوِّن المُنتج :( -cpojer https://github.com/facebook/jest/issues/1824#issuecomment -250376673

nsand : على سبيل المثال ، Icon كما يلي:

import React from 'react';

const Icon = ({ name }) => (
  <i className={`fa-icon fa-icon--${name}`}></i>
);

Icon.displayName = 'Icon';

export default Icon;

تضمين التغريدة شكرا لك. كنت أقوم ببعض عمليات التصحيح منذ قليل ولاحظت أنه إذا اتصلت بـ children() على الغلاف ، فإن هناك فرقًا واضحًا.

اختبار npm

 [ { '$$typeof': Symbol(react.element),
           type: [Function: Icon],
           key: null,
           ref: null,
           props: [Object],
           _owner: null,
           _store: {} } ]

ضد
اختبار npm - - Coverage

[ { '$$typeof': Symbol(react.element),
           type: [Function],
           key: null,
           ref: null,
           props: [Object],
           _owner: null,
           _store: {} } ]

حيث يكون الاختلاف هو أن الوظيفة تمت تسميتها بـ npm test . لذلك يبدو أن هذا يسير جنبًا إلى جنب مع ما نشرته ، واقتراحك يعمل بالفعل على حل المشكلة. شكرا لك ، thymikee وrogeliog!

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