【问题标题】:Jest unit testing: block all outgoing traffic笑话单元测试:阻止所有传出流量
【发布时间】:2019-06-25 18:48:53
【问题描述】:

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

如果用 jest 无法做到这一点,那么最好的做法是什么? iptables 可能吗?

【问题讨论】:

    标签: unit-testing jestjs blocking traffic


    【解决方案1】:

    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,并提供了许多实用程序来涵盖大多数可能的边缘情况,同时模拟网络响应/请求。

    【讨论】:

      猜你喜欢
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-21
      • 2015-10-17
      • 1970-01-01
      • 1970-01-01
      • 2018-03-23
      相关资源
      最近更新 更多