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

rfc1484

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

它返回一个空的输出:

样式{}

尽管在此简化示例中以及在完整的代码中,该组件都在Web应用程序生成的html代码中生成了预期的html类,并且具有良好的相应样式。

fabio.sussetto

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

如果没有启用该选项,则仍然需要指示Mocha导入CSS模块并正确解析它。/var/www/web/app/components/Icon.css: Leading decorators must be attached to a class声明错误可能是由于该摩卡试图解释的CSS文件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初始化代码将在测试之前运行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在React组件中使用CSS模块以及由webpack构建的Typescript

使用React和Enzyme测试设置文本值

使用Enzyme和Sinon调用了对React组件的测试自定义方法

使用React组件分发CSS

使用Jest和Enzyme测试react-router v4

使用React,React-Router,Jest和Enzyme测试状态变化

Jest和Enzyme使用ES6 Arrow函数测试React组件

开始使用Enzyme和Jest测试React组件

如何使用Jest + Enzyme测试React组件的样式?

使用Jest和Enzyme测试React组件中的反跳功能

在使用React Navigation和TypeScript时,如何使用Jest和Enzyme对静态navigationOptions进行单元测试?

如何使用Jest和Enzyme测试组件的条件渲染

模拟使用使用导入*导入的玩笑的模块以测试React组件

使用Mocha在React中渲染的SVG组件上测试道具

如何使用Jest和Enzyme测试React中的功能

使用Jest / Enzyme延迟后意外测试React组件的行为

使用React和Jest测试React中的组件功能

如何使用Enzyme和Jest在单元测试中检查嵌套的React组件的值

使用Enzyme Jest测试React组件以查找HTML元素

使用Jest和Enzyme测试使用Redux的功能性React组件

无法使用Enzyme从react-bootstrap-typeahead测试AsyncTypeahead

使用React和Enzyme在异步处理程序中测试中介状态

使用 Jest 和 Enzyme 测试 React 组件。错误:无法读取地图的属性未定义

使用 Mocha 和 Chai 测试 React

如何使用 Jest 和 Enzyme 为简单的 React 组件编写测试用例

如何在 React TDD 中使用 jest 和 Enzyme 测试组件的状态是否被函数更改

使用 Enzyme 和 Jest 在 React 中测试处理更改功能

如何在 React 中使用 Enzyme 和 Jest 编写功能测试

如何在 React 中使用 CSS 模块将多个类动态传递给子组件