我们正在尝试使用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();
答案 0 :(得分:2)
当前,您无法使用requestEvent.requestOptions.url
属性更改请求的目标URL,我为此创建了一个问题:DevExpress/testcafe#2635。您应该使用hostname
,port
和path
属性:
requestEvent.requestOptions.hostname = 'localhost';
requestEvent.requestOptions.port = 4200;