私はここでReact CSS modulesテスト
を使用するサンプルにFoo
コンポーネントであるコンポーネントの生成されたクラスをテストしようとしています:
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 });
テストコード(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コード:
.bar {
background-color: red;
}
そしてここでは、テスト用のHTML出力です:
DEBUG-----> <div></div>
あなたはそれがどのクラスなしの空のdivを生成するので、何の表明は働かない見ることができるように。
また、これはテストでのみ失敗し、コンポーネントはWebアプリケーションで生成されたhtmlコードで期待されるhtmlクラスを生成します。
これを修正する方法はありますか?
UPDATE
私はオプションerrorWhenNotFound: false
を削除しようとしたファビオによってコメントで示唆したように今の試験は、次のエラーメッセージが得られます。
Error: "bar" CSS module is undefined.
IドンバークラスはFoo.css
ファイルで定義されているため、理解できません。
STYLES {}
この単純な例では、フルで両方ものの:
import styles from './Foo.css';
console.log('STYLES', styles);
それは空の出力を返します。
はまた、私はFoo
コンポーネントのスタイルをデバッグする場合は、そのIを見つけました本格的なコードでは、コンポーネントは、Webアプリケーションで生成されたhtmlクラスを生成し、対応するスタイルが正常に動作するhtmlコードを生成します。
あなたはWebPACKのを使用している場合は、インポートしたCSSファイルを無視し、テスト固有のconfig /ローダーを持っていますか? CSSModulesがそのクラス名を見つけられず、 '' 'errorWhenNotFound:false'''(これを削除して問題のデバッグを助けることもできます)によってエラーが無視されることがあります。 –
これで、出力にクラスが表示されない理由は少なくともわかりました。私はまだあなたがいくつかのテスト関連の設定やCSSファイルの内容を無視するコードを持っていると思う、このようなもの:https://www.npmjs.com/package/ignore-stylesこれはかなりテストで使用するのが一般的です。あなたは、あなたがテストに使う完全なwebpack設定を投稿できますか?あなたはテストランナーとしてモカを使用していますか?このhttps://github.com/airbnb/enzyme/issues/202に関連する何かをしようとしていますか? –
私はあなたが大当たりを打つと思う! Mochaは 'ignore-styles'オプションで実行されていましたが、これが修正されたので、次のエラーメッセージが生成されています:' SyntaxError:/var/www/web/app/components/Icon.css:リーディングデコレータを添付する必要がありますクラス宣言に ' しかし、少なくとも今は別の問題です。 – rfc1484