gpt4 book ai didi

unit-testing - 使用 Mocha 和 Enzyme 测试使用 React CSS 模块的 React 组件

转载 作者:行者123 更新时间:2023-12-03 13:29:10 24 4
gpt4 key购买 nike

我正在尝试测试使用 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 类。

知道如何解决这个问题吗?

更新

根据 fabio 评论中的建议,我尝试删除选项 errorWhenNotFound: false

现在测试给出以下错误消息:

Error: "bar" CSS module is undefined.

我不明白,因为 bar 类是在 Foo.css 文件中定义的。

我还发现,如果我调试 Foo 组件中的样式:

import styles from './Foo.css';
console.log('STYLES', styles);

它返回一个空输出:

STYLES {}

尽管在这个简化的示例和完整的代码中,组件都会在 Web 应用程序生成的 html 代码中生成预期的 html 类,并且相应的样式工作正常。

最佳答案

正如OP在评论中所述,问题在于Mocha运行时使用了ignore-styles选项。这与 errorWhenNotFound: false 选项一起掩盖了实际问题,即模块导出的样式对象实际上是空的,Mocha 忽略了该模块。

如果不启用该选项,您仍然需要指示 Mocha 导入 CSS 模块并正确解析它。/var/www/web/app/components/Icon.css:leadingdecorators必须附加到一个类声明错误可能是由于Mocha尝试解释css文件的内容as js,这显然失败了。

要正确设置,请查看此处: https://gist.github.com/mmrko/288d159a55adf1916f71

这个想法是做这样的事情:

var hook = require('css-modules-require-hook')
var sass = require('node-sass')

hook({
extensions: [ '.scss', '.css' ],
generateScopedName: '[local]___[hash:base64:5]',
preprocessCss: ( data, file ) => sass.renderSync({ file }).css
})

在你的 Mocha 入口文件中(在你做任何其他事情之前),告诉它如何处理 css/sass 文件。

例如,您可以将该要点的内容放入 test/setup.js 文件中,然后按以下方式运行 Mocha:

mocha --compilers js:babel-register --require ./test/setup.js \"./test/**/*.spec.js\"

这样,您的 setup.js 初始化代码将在测试之前运行。

关于unit-testing - 使用 Mocha 和 Enzyme 测试使用 React CSS 模块的 React 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39852305/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com