javascript - 测试使用带有 Jest 和 enzyme 的样式组件创建的组件

标签 javascript reactjs jestjs enzyme

我有一些使用样式组件库创建的标签:

组件.js

....
const NoJobs = styled.h1`
    text-align: center;
`;
....
<div>
  <NoJobs>
    No Jobs Found!!!
  </NoJobs>
</div>

我想测试这个组件,下面是我的测试用例:

组件.test.js

describe('<JobList />', () => {
    let wrapper;

    beforeEach(() => {
        wrapper = shallow(<JobList />);
    });

    it('should show "no data found" when there is no data', () => {
       expect(wrapper.contains(<NoJobs>No Jobs Found!!!</NoJobs>)).toEqual(true);
    });
});

当我运行上面的测试时,它显示:NoJobs 未定义。

尽管如果我在 component.js 和 component.test.js 中使用 plan div 标记更改 NoJobs,它工作正常。如何测试使用样式组件创建的标签?

最佳答案

快捷方式

您可以像这样导出NoJobs

const NoJobs = styled.h1`...

那会起作用的。您也可以使用find()可能需要一个 displayName 字符串,因此您可以

const NoJobs = styled.h1`...
NoJobs.displayName = "NoJobs";

然后在测试中:

expect(wrapper.find('NoJobs').text()).toEqual("No Jobs Found!!!");

您还可以安装special babel plugin自动处理该问题。

系统方法

但对我来说,最可维护的方法是完全避免坚持显示名称/组件名称并使用基于属性的选择器:

<div>
  <NoJobs data-testid="no-jobs-message">
    No Jobs Found!!!
  </NoJobs>
</div>

以及稍后的测试

expect(wrapper.find({"data-testid": "no-jobs-message"}).text()).toEqual("No Jobs Found!!!")

关于javascript - 测试使用带有 Jest 和 enzyme 的样式组件创建的组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59503501/

相关文章:

javascript - 如何仅通过一个 Jest 配置文件/设置使用多个 Jest 预设?

javascript - 如何制作自定义、无需编辑、防弹jquery的无冲突版本?

javascript - 如何为 jQuery Masked 输入插件创建一个允许字母数字、空格和重音字符的掩码?

javascript - Paypal Express Checkout - 授权未出现在仪表板中

javascript - 在父组件中使用组件的多个实例

unit-testing - 在没有导出的情况下测试 typescript 模块

Javascript、函数作用域和返回运算符

reactjs - 如何使 react 选择选项可滚动

javascript - 根据 Material UI 中的选择启用下拉菜单

vue.js - 使用 `Created` 钩子(Hook)和 `vue-test-utils` 和 `jest` 进行测试