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