unit-testing - Jest 单元测试 : block all outgoing traffic

标签 unit-testing jestjs blocking traffic

我想在 Jest 运行单元测试时以某种方式阻止所有传出流量。理想情况下,您模拟所有模块(或发送 http 请求的函数),包括第 3 方模块,但是当您处于开发过程中时,您可能无法从一开始就模拟所有模块,并且可能会意外发送一些数据。

如果开 Jest 无法做到这一点,那么最好的做法是什么?也许是 iptables?

最佳答案

JS代码发送请求的方式只有几种:new XMLHttpRequestfetchnew WebSocket。一旦你在文件设置中模拟它(jest 提供单个文件,肯定会在任何测试运行之前调用)你是安全的:

window.fetch = jest.fn();

稍后在你的测试中这样做

window.fetch.mockImplementation((url) =>  
   url === 'https://example.org/data' && 
     Promise.resolve({ message: 'wrong', data: 1 })
);
...
expect(window.fetch).toHaveBeenCalledWith('https://example.org/data');
...

当然,如果您自己完成这项工作,那将是一项相当大的工作。所以有特定的软件包可以为您做到这一点。说 fetch-mock .我现在最喜欢的是 nock它涵盖了 XHRfetch,并提供了大量实用程序来涵盖大多数可能的边缘情况,同时模拟网络响应/请求。

关于unit-testing - Jest 单元测试 : block all outgoing traffic,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56760324/

相关文章:

mongodb 更改流 java

multithreading - 在 Kotlin 协程上运行阻塞的 CPU 绑定(bind)任务

java - Junit5 错误。您必须为此 @ParameterizedTest 提供至少一个参数

c# - 为什么 1 000 000 不等于 1000000.toString ("N", new CultureInfo ("fr-FR"))

javascript - 无法从 'react-native-implementation.js' 找到模块

typescript - Typeorm 装饰器不是函数

c - 线程中的 OpenMP 阻塞调用

c# - 你应该如何使用 NUnit 3.2?

c# - 单元测试的文件范围

javascript - Jest 测试 .toBeInstanceOf(Error) 失败