Jest: Beberapa tes yang lulus akan gagal saat menggunakan --coverage flag

Dibuat pada 8 Des 2016  ·  3Komentar  ·  Sumber: facebook/jest

Apakah Anda ingin meminta fitur atau melaporkan bug ?

Serangga

Apa perilaku saat ini?

Mengeksekusi npm test memiliki semua tes yang lulus; namun, mengeksekusi npm test -- --coverage menyebabkan beberapa tes gagal.

Jika perilaku saat ini adalah bug, berikan langkah-langkah untuk mereproduksi dan jika mungkin repositori minimal di GitHub yang dapat kami npm install dan npm test .

Saya memiliki proyek yang berisi sejumlah komponen reaksi yang saya uji menggunakan lelucon dan enzim. Saya baru-baru ini memindahkan kami dari [email protected] ke [email protected] dan [email protected] ke [email protected] . Saya membersihkan direktori node_modules sebelum menginstal versi yang lebih baru.

Saya menjalankan npm test dan semua tes lulus. Ketika saya menjalankan npm test -- --coverage , beberapa tes gagal dan laporan cakupan dibuat.

Sepertinya semua kegagalan ada di sekitar komponen yang dirender dangkal dengan enzim dan kemudian menggunakan find(selector) untuk menemukan node di pohon render. Node berhasil ditemukan selama jest , tetapi gagal untuk jest --coverage .

Sebelum peningkatan, semua tes lulus untuk jest dan jest --coverage .

Repo: https://github.com/nsand/jest-coverage

Apa perilaku yang diharapkan?

Saya berharap semua tes lulus untuk kedua eksekusi.

Jalankan Jest lagi dengan --debug dan berikan konfigurasi lengkap yang dicetaknya.

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

Komentar yang paling membantu

Menambahkan displayName ke komponen Anda akan memperbaikinya

Istanbul membungkus fungsi dengan fungsi anonim lainnya dan kami mengambil nama fungsi yang diberikan node ke komponen yang dirender :( -- @cpojer https://github.com/facebook/jest/issues/1824#issuecomment -250376673

@nsand : Misalnya, komponen Icon sekarang akan terlihat seperti ini:

import React from 'react';

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

Icon.displayName = 'Icon';

export default Icon;

Semua 3 komentar

@dmitriiabramov ada ide mengapa ini terjadi?

Menambahkan displayName ke komponen Anda akan memperbaikinya

Istanbul membungkus fungsi dengan fungsi anonim lainnya dan kami mengambil nama fungsi yang diberikan node ke komponen yang dirender :( -- @cpojer https://github.com/facebook/jest/issues/1824#issuecomment -250376673

@nsand : Misalnya, komponen Icon sekarang akan terlihat seperti ini:

import React from 'react';

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

Icon.displayName = 'Icon';

export default Icon;

@rogeliog Luar biasa! Terima kasih. Saya melakukan beberapa debugging sedikit yang lalu dan telah memperhatikan jika saya memanggil children() pada pembungkusnya, bahwa ada perbedaan yang terlihat.

tes npm

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

vs
tes npm -- --cakupan

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

Di mana perbedaannya adalah bahwa Fungsi dinamai npm test . Jadi ini tampaknya berjalan seiring dengan apa yang Anda posting, dan proposal Anda memang memperbaiki masalah. Terima kasih, @thymikee dan @rogeliog!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat