React CSS モジュールを使用するコンポーネントの生成されたクラスをテストしようとしています
サンプル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 クラスを生成します。
これを修正する方法はありますか?
アップデート
ファビオのコメントで示唆されているように、オプションを削除しようとしましたerrorWhenNotFound: false
テストで次のエラー メッセージが表示されるようになりました。
エラー: "bar" CSS モジュールが定義されていません。
bar クラスがFoo.css
ファイルで定義されているため、わかりません。
Foo
また、コンポーネントのスタイルをデバッグすると、次のことがわかりました。
import styles from './Foo.css';
console.log('STYLES', styles);
空の出力を返します。
スタイル {}
この単純化された例と本格的なコードの両方で、コンポーネントは、対応するスタイルが正常に機能する HTML コードを生成した Web アプリで期待される html クラスを生成します。