Ich versuche, die generierte Klasse einer Komponente zu testen, die React CSS modules-Test mit Mokka und Enzym eine Reaktion Komponente, die CSS-Module Reagieren verwendet
Hier verwendet, ist eine Probe Foo
Komponente:
import React from 'react';
import CSSModules from 'react-css-modules';
import styles from './Foo.css';
const Foo = ({ className }) => <div styleName={className} />;
Foo.propTypes = {
className: React.PropTypes.string.isRequired,
};
export default CSSModules(Foo, styles, { allowMultiple: true, errorWhenNotFound: false });
-Test Code (Foo.spec.jsx
):
import React from 'react';
import { expect } from 'chai';
import { shallow } from 'enzyme';
import Foo from '../../../app/components/Foo';
describe('<Foo/>',() => {
it.only('should return a className prop as class value',() => {
const wrapper = shallow(<Foo className="bar" />);
console.log('DEBUG----->', wrapper.html());
});
});
Foo.css Code:
.bar {
background-color: red;
}
Und hier ist der Test HTML-Ausgabe:
DEBUG-----> <div></div>
Wie Sie es erzeugt ein leeres div ohne Klasse sehen kann, also keine Behauptung funktioniert.
Auch ich möchte darauf hinweisen, dass dies nur im Test fehlschlägt, generiert die Komponente die erwartete HTML-Klasse in der Web-App generiert HTML-Code.
Irgendeine Idee, wie man das repariert?
UPDATE
Wie im Kommentar von fabio schlug ich habe versucht, die Möglichkeit zu entfernen errorWhenNotFound: false
Nun wird die Test gibt die folgende Fehlermeldung:
Error: "bar" CSS module is undefined.
Was ich don verstehe nicht, da die Balkenklasse in der Datei Foo.css
definiert ist.
Auch habe ich festgestellt, dass, wenn ich debuggen die Stile in der Foo
Komponente:
import styles from './Foo.css';
console.log('STYLES', styles);
Es gibt eine leere Ausgabe:
STYLES {}
Obwohl beide in diesem vereinfachten Beispiel und in der Voll flügge Code Die Komponente generiert die erwartete HTML-Klasse in der Web-App generiert HTML-Code mit den entsprechenden Stilen funktioniert gut.
Wenn Sie webpack verwenden, haben Sie eine testspezifische config/Ladern, die die importierten CSS-Dateien ignoriert? Es kann sein, dass CSSModules diesen Klassennamen nicht findet und der Fehler von '' errorWhenNotFound: false''' ignoriert wird (was Sie auch versuchen könnten, das zu entfernen, um das Problem zu beheben). –
Jetzt wissen wir zumindest, warum Sie die Klasse in der Ausgabe nicht sehen. Ich denke immer noch, dass Sie eine testbezogene Konfiguration oder einen Code haben, der den Inhalt der CSS-Datei ignoriert, etwa so: https://www.npmjs.com/package/ignore-styles, was in Tests ziemlich üblich ist. Können Sie Ihre vollständige Webpack-Konfiguration posten, die Sie für Tests verwenden? Verwenden Sie Mocha als Testläufer? Versuchen Sie, irgendetwas in Bezug auf dieses https://github.com/airbnb/enzy/issues/202 zu tun? –
Ich denke du hast den Jackpot geknackt! Mocha wurde mit der Option 'ignore-styles' ausgeführt, jetzt, wo dies behoben ist, wird die folgende Fehlermeldung generiert: 'SyntaxError: /var/www/web/app/components/Icon.css: Führende Dekoratoren müssen angehängt werden zu einer Klassendeklaration " Aber zumindest ist es jetzt ein anderes Problem. – rfc1484