Jest: Einige bestandene Tests schlagen fehl, wenn --coverage flag . verwendet wird

Erstellt am 8. Dez. 2016  ·  3Kommentare  ·  Quelle: facebook/jest

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
}
Confirmed

Hilfreichster Kommentar

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;

Alle 3 Kommentare

@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!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen