Vous souhaitez demander une fonctionnalité ou signaler un bug ?
Bogue
Quel est le comportement actuel ?
L'exécution de npm test
fait réussir tous les tests ; cependant, l'exécution de npm test -- --coverage
provoque l'échec de certains tests.
Si le comportement actuel est un bogue, veuillez fournir les étapes à reproduire et si possible un référentiel minimal sur GitHub que nous pouvons npm install
et npm test
.
J'ai un projet contenant un certain nombre de composants réactifs que je teste à l'aide de plaisanteries et d'enzymes. Je nous ai récemment fait passer de [email protected]
à [email protected]
et de [email protected]
à [email protected]
. J'ai nettoyé le répertoire node_modules
avant d'installer les nouvelles versions.
Je lance npm test
et tous les tests réussissent. Lorsque j'exécute npm test -- --coverage
, certains tests échouent et le rapport de couverture est généré.
Il semble que tous les échecs concernent un composant rendu peu profond avec une enzyme, puis utilisant find(selector)
pour trouver des nœuds dans l'arbre de rendu. Les nœuds sont trouvés avec succès pendant jest
, mais échouent pendant jest --coverage
.
Avant la mise à niveau, tous les tests ont réussi pour jest
et jest --coverage
.
Dépôt : https://github.com/nsand/jest-coverage
Quel est le comportement attendu ?
Je m'attendrais à ce que tous les tests réussissent pour les deux exécutions.
Exécutez à nouveau Jest avec --debug
et fournissez la configuration complète qu'il imprime.
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 des idées sur pourquoi cela se produit-il ?
L'ajout de displayName
à vos composants devrait résoudre le problème 😄
Istanbul encapsule les fonctions avec d'autres fonctions anonymes et nous prenons le nom de fonction que le nœud donne au composant rendu :( -- @cpojer https://github.com/facebook/jest/issues/1824#issuecomment -250376673
@nsand : Par exemple, votre composant Icon
ressemblera maintenant à ceci :
import React from 'react';
const Icon = ({ name }) => (
<i className={`fa-icon fa-icon--${name}`}></i>
);
Icon.displayName = 'Icon';
export default Icon;
@rogeliog Incroyable ! Merci. Je faisais du débogage il y a un peu et j'avais remarqué que si j'appelais children()
sur le wrapper, il y avait une différence visible.
test npm
[ { '$$typeof': Symbol(react.element),
type: [Function: Icon],
key: null,
ref: null,
props: [Object],
_owner: null,
_store: {} } ]
vs
test npm -- --couverture
[ { '$$typeof': Symbol(react.element),
type: [Function],
key: null,
ref: null,
props: [Object],
_owner: null,
_store: {} } ]
La différence est que Function est nommé pour npm test
. Cela semble donc aller de pair avec ce que vous avez publié, et votre proposition résout effectivement le problème. Merci @thymikee et @rogeliog !
Commentaire le plus utile
L'ajout de
displayName
à vos composants devrait résoudre le problème 😄@nsand : Par exemple, votre composant
Icon
ressemblera maintenant à ceci :