在requesthook中更改请求URL

时间:2018-07-16 04:59:50

标签: testcafe

我们正在尝试使用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();

1 个答案:

答案 0 :(得分:2)

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

requestEvent.requestOptions.hostname = 'localhost';
requestEvent.requestOptions.port     = 4200;