概述

在测试网站时,可能会有这种情况,您的网站向特定 URL 发送 HTTP 请求,但您不想在测试运行期间向该 URL 发送请求,而是想要模拟该 URL 的响应。现在可以使用 Nightwatch 实现这一点。

由于 Selenium 4 中现在提供了 Chrome DevTools 协议支持,Nightwatch 现在支持拦截 HTTP 请求并模拟特定 URL 的响应。

此命令仅适用于基于 Chromium 的浏览器,例如 Google Chrome 和 Microsoft Egde。

模拟网络响应

此命令允许您模拟特定 URL 的 HTTP 响应。运行此命令后,只要 HTTP 请求的 URL 与传递到命令中的 URL **完全** 匹配,就会拦截该请求,并将提供的模拟发送回浏览器作为响应。

您只需要在导航到您的网站之前使用所需参数调用 browser.mockNetworkResponse() 命令。

mockNetworkResponse() 接受 url (string 类型) 作为第一个参数,并接受 response 对象作为第二个参数。response 对象的规范如下所示:

类型 默认值 描述
状态 数字 200 模拟响应的 HTTP 状态。
标头 对象 {} 模拟响应中的 HTTP 标头。
例如:headers = {'Connection': 'Keep-Alive', 'Content-Type': 'UTF-8'}
主体
可选
字符串 '' 模拟响应的主体。

示例

tests/mock-network-response.js
describe('mock network response', function() {
  it('intercepts the request made to Google search and mocks its response', function() {
    browser
      .mockNetworkResponse('https://www.google.com/', {
        status: 200,
        headers: {
          'Content-Type': 'UTF-8'
        },
        body: 'Hello there!'
      })
      .navigateTo('https://www.google.com/')
      .pause(2000);
  });
});