我试图运行JS作出反应的单元测试 - 用笑话/酶。
该测试是在moment.Not很确定没有为什么,也许我没有正确地调用期望(wrapper.find)。 下面是我测试的一部分:
File.test.js
it('renders modal when open flag is true', () => {
const props = { isOpen: true };
const wrapper = mount(
<div id="root">
<Component {...props} />
</div>
);
wrapper.update();
expect(toJson(wrapper)).toMatchSnapshot();
expect(wrapper.find('.loa-download-header').exists()).toEqual(true);
expect(wrapper.text()).toContain(' Please enter a password.');
});
});
下面是File.js的部分示出了一块,我想测试作为例子的代码。
render() {
return (
<Modal
<div title="Close Window" className="add-custom-field-close" onClick={() => {this.closeModal()}}><FontAwesome name='xbutton' className='fa-times' /></div>
</div>
</div>
<div className='loa-download-header-wrapper'>
<div className='loa-download-header'>
Please enter a password.
</div>
错误:期待(接受).toEqual(预期)
Expected value to equal:
true
Received:
false
对代码的任何更正将是非常有帮助谢谢
我花了一些时间你的代码集成到一个沙盒。 有相当你的代码,我在下面列出了一些更改。 我还包含了一些测试,已经被填入,有些则不是。 你应该做的是花一些时间与这些变化熟悉自己,这样就可以在测试的其余部分填补containers/LOAs/__tests__
你自己的 。
虽然我写的综合测试LOAs
容器,我鼓励你写单元测试的小components
,让你可以练习嘲讽prop
功能检查,如果他们被调用,并确保部件按预期。 尽管这将是多余的,它会帮助你理解的流动,要考什么,以及如何测试(单元测试,你要使用shallowWrap
而不是mountWrap
功能-或者不使用他们和使用提供shallow
和mount
所提供的功能enzyme
......由你)。
工作示例 : https://codesandbox.io/s/p3ro0615nm
变化 :
- 创建一个容器处理所有组件
UI
和state
的变化 - 二手
this.setState()
回调 ,保持state
和辅助操作同步。 同样重要的是,这也减少了不必要的组件闪烁。 - 二手条件呈现与使用三元运算符
- 二手lodash的
filter
, map
,和isEmpty
功能(他们方便,我喜欢他们通过本地JS功能) - 嘲笑2次API调用(注意,我用
setTimeout
,因为这会影响你的测试)。 在fakeAPI.post
功能,我添加了一个假密码来对证,因此,所提供的密码必须是12345! - 增加了选择的能力,并取消选择协议书。 如果需要,你可以用复选框简化了这一切。
- 类
methods
开始handle
,而流传下来的方法与开始on
。 - 打破了
components/LOAModal/LOAModal.js
成更小的/可重复使用的组件,使其更易于阅读 - 新增
PropType
检查,以确保道具是在初始宣布和跨组件一致。
注意事项 :
- 测试的主要部分是理解发生了什么在幕后,所以花时间来阅读文档 ; 并且,如果必要的话,做的更小/更简单的项目,以帮助自己熟悉如何应对工作。
- 测试时,如果你需要看到
DOM
的enzyme
看到它,那么你可以console.log(wrapper.debug());
里面你的it
的测试。 - 您可以利用
jest.useFakeTimers()
在beforeEach()
函数和jest.runAllTimers()
在afterEach()
函数来模拟setTimeout
功能,而无需等待实时传递。 - 非常重要 :始终包括
.catch()
一后Promise
(API调用)。 如果你没有catch
你的承诺,那么它可能会崩溃您的应用程序。