我有一个容器组件,该容器组件用于通过ajax
的{{1}}运算符获取数据
rxjs
在我的componentDidMount中,我有
const data = ajax(someUrl).pipe(map(r => r.response));
// test.js
data.subscribe((data) => {
this.setState({ data });
});
我该如何模拟响应,以便在运行测试时可以将数据传递给其他组件并检查它们是否呈现?
我发现的所有测试示例都是Redux-Observable的示例,我没有使用。
非常感谢!
答案 0 :(得分:2)
首先,您需要了解应该一次测试 一件事 。 意味着测试异步方法执行与测试呈现正确内容的组件应该分开。
要测试异步方法,您可以模拟数据,而不是在Jest中模拟计时器。
https://jestjs.io/docs/en/tutorial-async
https://jestjs.io/docs/en/asynchronous
https://jestjs.io/docs/en/timer-mocks.html
使用jest.useFakeTimers()
和上述技术。
要测试组件是否正确渲染,请使用开玩笑snapshots
和e2e测试(可以使用示例TestCafe完成)
要连接这些方法,您需要以一种允许您进行以下操作的方式设计应用程序:
您在组件中调用的API应该在组件外部,并应从该外部源(不同的文件,不同的类,但您可以设计)来调用,以便可以在测试中将其替换。
整个API应该是模块化的,因此您只需要一个模块即可对其进行测试,而无需为此初始化整个API。
如果以这种方式设计应用程序,则可以使用模拟数据初始化API的一部分,而不是在测试中呈现组件,因为它将调用模拟API,因此可以检查其是否呈现了预期的外观至。