【发布时间】:2019-10-16 12:56:51
【问题描述】:
下面是我为一个使用 Jest 和 Enzyme 进行测试的 React 项目制作的一个小测试文件。在这个测试中,我只是试图在组件中找到一个元素并查看它是否存在(作为一个真实的条件)。这个测试的重点不仅仅是看看元素是否存在,而是我想我应该从这里开始。我对测试很陌生,所以这种语法/实现可能很疯狂:
import React from 'react';
import ReactDOM from 'react-dom';
import Enzyme from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import HamburgerIcon from './HamburgerIcon';
Enzyme.configure({ adapter: new Adapter() });
test('my first test -- will add better text here later', () => {
const div = document.createElement('div');
ReactDOM.render(<HamburgerIcon />, div);
expect(div.find('.closed').exists()).toBeTruthy();
ReactDOM.unmountComponentAtNode(div);
});
运行这个会导致这个错误:
TypeError: div.find 不是函数
我最初是在看到this Stack Overflow answer 后构建了这个测试。
我不确定如何解决这个问题,但我猜我可能没有在这个测试中正确“安装”组件?在上一个链接的同一个 Stack Overflow 线程中,this answer shows how you would mount a component,但对该答案的另一条评论说需要安装另一个包才能做到这一点。
我有点认为使用div 变量作为要使用find 搜索的容器会起作用,但我这样想错了吗?
【问题讨论】:
-
.find是一种 jquery 方法,不是 JavaScript 原生的 -
您需要遵循正确的指南,而不是跳出 stackoverflow 的答案。你走错方向了。您在代码中缺少安装或浅层渲染,并且您在其上运行
.findReactDOM 不是测试渲染器,酶在您的情况下 -
.findis in the Enzyme API -- 我认为导入酶会包括.find,但也许我错了? -
在查看其他 SO 帖子后,他们在反应组件上使用
.find,而不是在原生 javascript 元素对象上。所以你需要expect(Component1.find(<Component2 />).exists()).toBeTruthy(); -
@Rikin 谢谢——我会研究安装以及它是如何工作的。
标签: javascript reactjs testing jestjs enzyme