Möchten Sie eine Funktion anfordern oder einen Fehler melden?
Insekt
Wie ist das aktuelle Verhalten?
Beim Ausführen von npm test
sind alle Tests erfolgreich; Die Ausführung von npm test -- --coverage
führt jedoch dazu, dass einige Tests fehlschlagen.
Wenn das aktuelle Verhalten ein Fehler ist, geben Sie bitte die Schritte zum Reproduzieren und wenn möglich ein minimales Repository auf GitHub an, das wir npm install
und npm test
.
Ich habe ein Projekt mit einer Reihe von Reaktionskomponenten, die ich mit Jest und Enzym teste. Ich habe uns vor kurzem von [email protected]
auf [email protected]
und von [email protected]
auf [email protected]
. Ich habe das Verzeichnis node_modules
geleert, bevor ich die neueren Versionen installiert habe.
Ich führe npm test
und alle Tests bestehen. Wenn ich npm test -- --coverage
ausführe,
Es scheint, als ob alle Fehler in Zusammenhang mit einer Komponente auftreten, die mit Enzym flach gerendert wird und dann find(selector)
, um Knoten im Renderbaum zu finden. Die Knoten werden während jest
erfolgreich gefunden, schlagen jedoch für jest --coverage
fehl.
Vor dem Upgrade wurden alle Tests für jest
und jest --coverage
.
Repo: https://github.com/nsand/jest-coverage
Was ist das erwartete Verhalten?
Ich würde erwarten, dass alle Tests für beide Ausführungen bestehen.
Führen Sie Jest erneut mit --debug
und geben Sie die vollständige Konfiguration an, die es ausdruckt.
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
}
@dmitriiabramov irgendwelche Ideen, warum das passiert?
Das Hinzufügen von displayName
zu Ihren Komponenten sollte das Problem beheben 😄
Istanbul umschließt Funktionen mit anderen anonymen Funktionen und wir nehmen den Funktionsnamen, den der Knoten der gerenderten Komponente gibt :( -- @cpojer https://github.com/facebook/jest/issues/1824#issuecomment -250376673
@nsand : Ihre Icon
Komponente sieht jetzt beispielsweise so aus:
import React from 'react';
const Icon = ({ name }) => (
<i className={`fa-icon fa-icon--${name}`}></i>
);
Icon.displayName = 'Icon';
export default Icon;
@rogeliog Erstaunlich! Dankeschön. Ich habe vor einiger Zeit ein Debugging durchgeführt und hatte bemerkt, dass es einen sichtbaren Unterschied gab, wenn ich children()
auf dem Wrapper aufrief.
npm-Test
[ { '$$typeof': Symbol(react.element),
type: [Function: Icon],
key: null,
ref: null,
props: [Object],
_owner: null,
_store: {} } ]
vs
npm-Test -- --coverage
[ { '$$typeof': Symbol(react.element),
type: [Function],
key: null,
ref: null,
props: [Object],
_owner: null,
_store: {} } ]
Der Unterschied besteht darin, dass Function nach npm test
. Dies scheint also Hand in Hand mit dem zu gehen, was Sie gepostet haben, und Ihr Vorschlag behebt das Problem tatsächlich. Danke, @thymikee und @rogeliog!
Hilfreichster Kommentar
Das Hinzufügen von
displayName
zu Ihren Komponenten sollte das Problem beheben 😄@nsand : Ihre
Icon
Komponente sieht jetzt beispielsweise so aus: