我正在尝试测试使用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 类。
知道如何解决这个问题吗?
更新
正如 fabio 在评论中所建议的那样,我试图删除该选项errorWhenNotFound: false
现在测试给出以下错误信息:
错误:“bar”CSS 模块未定义。
我不明白,因为 bar 类是在Foo.css
文件中定义的。
我还发现,如果我调试Foo
组件中的样式:
import styles from './Foo.css';
console.log('STYLES', styles);
它返回一个空输出:
风格{}
尽管在这个简化的示例和完整的代码中,组件都会在 Web 应用程序生成的 html 代码中生成预期的 html 类,并且相应的样式可以正常工作。