【发布时间】:2017-07-02 16:51:40
【问题描述】:
当涉及到按钮的 onClick 处理程序时,我在使用 Enzyme 的 contains 方法时遇到问题,其中提供的操作方法需要一个参数。 我在将 redux 操作传递给组件时遇到了这个问题,但我将在这里使用简化的示例。
假设你有两种方法:
const logClick = () => console.log('button was clicked');
const logClickWithArg = (message) => console.log('button was clicked: ', message);
您将它们传递给一个组件,并且在该组件中您有两个按钮:
<button
onClick={logClick}
>
Click
</button>
<button
onClick={() => logClickWithArg('hello')}
>
Click With Arg
</button>
当我测试第一个按钮时,没有问题:
expect(wrapper.contains(
<button
onClick={logClick}
>
Click
</button>)).toBe(true);
它通过了。但是,第二个:
expect(wrapper.contains(
<button
onClick={() => logClickWithArg('hello')}
>
Click
</button>)).toBe(true);
因无用的输出而失败:
expect(received).toBe(expected)
Expected value to be (using ===):
true
Received:
false
at Object.<anonymous>.it (src/App.test.js:42:3)
at process._tickCallback (internal/process/next_tick.js:103:7)
我尝试通过各种比较来了解更多信息,例如:
console.log('first ', wrapper.find('button').first().props().onClick);
console.log('last ', wrapper.find('button').last().props().onClick);
expect(wrapper.find('button').first().props().onClick).toEqual(logClick);
expect(wrapper.find('button').last().props().onClick).toEqual(logClickWithArg);
导致:
console.log src/App.test.js:29
first () => console.log('button was clicked')
console.log src/App.test.js:30
last () => logClickWithArg('hello')
expect(received).toEqual(expected)
Expected value to equal:
[Function logClickWithArg]
Received:
[Function onClick]
我使用 Jest 作为测试运行程序,并且在 create-react-app 和 react-boilerplate 设置中都遇到了这个问题。 知道我做错了什么吗?
编辑
我将在下面的答案中给出我自己的解决方法。我将在那里使用我的实际代码而不是这些示例。不过,我还是很好奇为什么这里的测试失败了....
【问题讨论】:
-
这个话题不能解决你的问题? stackoverflow.com/questions/35478076/…
标签: reactjs jestjs enzyme styled-components react-boilerplate