3

我们正在尝试使用 testcafe 实现功能测试。由于我们复杂的后端系统,在某些情况下(如 OTP、后端帐户锁定),如果没有人工干预,我们将无法访问实际的 API。为了避免这种情况,我们决定为某些端点运行存根服务器。

为了实现这一点,我们想在我们的测试代码中修改 API 的 URL。我们考虑使用自定义请求挂钩来更改 URL。尽管对象中的 URL 发生了变化,但浏览器会点击实际的 API URL。

import { RequestHook } from "testcafe";

class CustomRequestHook extends RequestHook {

   constructor() {
       super();
   }

   onRequest(requestEvent: any) {
   try {

        if (requestEvent.isAjax && requestEvent.requestOptions.isXhr && requestEvent.requestOptions.path.indexOf('.') === -1) {
    console.log(requestEvent.requestOptions.path);
    console.log("Before:", requestEvent.requestOptions.url);
    requestEvent.requestOptions.url = 'http://localhost:4200' + requestEvent.requestOptions.path;
    // requestEvent.requestOptions.host = 'localhost:4200';
    // requestEvent.requestOptions.hostname = 'localhost:4200';
    console.log("After:", requestEvent.requestOptions.url);
    requestEvent.requestOptions.headers['custom-header'] = 'value';
    // requestEvent.requestOptions.headers['host'] = 'localhost:4200';
  }
} catch (error) {
  console.log("Error:", error);

  // requestEvent.requestOptions.url = "www.google.com";
}
}
 onResponse(responseEvent: any) {
  console.log("response", responseEvent)
 }
}

export const CustomRequestHookInstance = new CustomRequestHook();
4

1 回答 1

3

目前您无法使用该requestEvent.requestOptions.url属性更改请求的目标 URL,我已经创建了一个关于此的问题:DevExpress/testcafe#2635。您应该使用hostname,portpath属性:

requestEvent.requestOptions.hostname = 'localhost';
requestEvent.requestOptions.port     = 4200; 
于 2018-07-17T14:15:09.390 回答