如何用玩笑测试rxjs ajax调用?

时间:2018-09-28 15:12:54

标签: javascript rxjs jestjs rxjs6

我有一个容器组件,该容器组件用于通过ajax的{​​{1}}运算符获取数据

rxjs

在我的componentDidMount中,我有

const data = ajax(someUrl).pipe(map(r => r.response));

// test.js

data.subscribe((data) => {
    this.setState({ data });
});

我该如何模拟响应,以便在运行测试时可以将数据传递给其他组件并检查它们是否呈现?

我发现的所有测试示例都是Redux-Observable的示例,我没有使用。

非常感谢!

1 个答案:

答案 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完成)

要连接这些方法,您需要以一种允许您进行以下操作的方式设计应用程序:

  1. 您在组件中调用的API应该在组件外部,并应从该外部源(不同的文件,不同的类,但您可以设计)来调用,以便可以在测试中将其替换。

  2. 整个API应该是模块化的,因此您只需要一个模块即可对其进行测试,而无需为此初始化整个API。

  3. 如果以这种方式设计应用程序,则可以使用模拟数据初始化API的一部分,而不是在测试中呈现组件,因为它将调用模拟API,因此可以检查其是否呈现了预期的外观至。

相关问题