【发布时间】:2019-06-25 18:48:53
【问题描述】:
我想在玩笑运行单元测试时以某种方式阻止所有传出流量。理想情况下,您模拟所有模块(或发送 http 请求的函数),包括第 3 方模块,但是当您处于开发过程中时,您可能无法从一开始就模拟所有内容,并且可能会意外发送一些数据。
如果用 jest 无法做到这一点,那么最好的做法是什么? iptables 可能吗?
【问题讨论】:
标签: unit-testing jestjs blocking traffic
我想在玩笑运行单元测试时以某种方式阻止所有传出流量。理想情况下,您模拟所有模块(或发送 http 请求的函数),包括第 3 方模块,但是当您处于开发过程中时,您可能无法从一开始就模拟所有内容,并且可能会意外发送一些数据。
如果用 jest 无法做到这一点,那么最好的做法是什么? iptables 可能吗?
【问题讨论】:
标签: unit-testing jestjs blocking traffic
JS 代码发送请求的方式只有几种:new XMLHttpRequest、fetch 和new 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,它涵盖了XHR 和fetch,并提供了许多实用程序来涵盖大多数可能的边缘情况,同时模拟网络响应/请求。
【讨论】: