开玩笑的单元测试:阻止所有传出的流量

时间:2019-06-25 18:48:53

标签: unit-testing jestjs blocking traffic

当我开玩笑地进行单元测试时,我想以某种方式阻止所有传出流量。理想情况下,您可以模拟包括第三方模块在内的所有模块(或发送HTTP请求的功能),但是在开发过程中,您可能无法一开始就模拟所有内容,并且可能会意外发送一些数据。

如果开玩笑不可能做到这一点,那么最佳做法是什么? iptables?

1 个答案:

答案 0 :(得分:0)

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,并且在模拟网络响应/请求时提供了许多工具来覆盖大多数可能的极端情况。