当我开玩笑地进行单元测试时,我想以某种方式阻止所有传出流量。理想情况下,您可以模拟包括第三方模块在内的所有模块(或发送HTTP请求的功能),但是在开发过程中,您可能无法一开始就模拟所有内容,并且可能会意外发送一些数据。
如果开玩笑不可能做到这一点,那么最佳做法是什么? iptables?
答案 0 :(得分:0)
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
,并且在模拟网络响应/请求时提供了许多工具来覆盖大多数可能的极端情况。