Javascript testcafe RequestLogger未拦截api调用

Javascript testcafe RequestLogger未拦截api调用,javascript,typescript,automated-tests,e2e-testing,testcafe,Javascript,Typescript,Automated Tests,E2e Testing,Testcafe,由于某些原因,我无法让testcafe的RequestLogger记录我正在进行的任何API调用。我已经阅读了几乎所有关于RequestLogger的文章和问题,所有内容都指向与下面代码相同的工作。不知道我做错了什么,任何帮助都会很好 参考文献: 我在本地运行,遇到一个也在本地运行的API,前端在端口3000,后端在端口8080,API位于:8080/API/admin。我可以看到记录器被注入到测试中,但没有任何更新,它只是一个带有初始道具的平淡对象,在t.expect语句之后会出错 我想

由于某些原因,我无法让testcafe的RequestLogger记录我正在进行的任何API调用。我已经阅读了几乎所有关于RequestLogger的文章和问题,所有内容都指向与下面代码相同的工作。不知道我做错了什么,任何帮助都会很好

参考文献:

我在本地运行,遇到一个也在本地运行的API,前端在端口3000,后端在端口8080,API位于:8080/API/admin。我可以看到记录器被注入到测试中,但没有任何更新,它只是一个带有初始道具的平淡对象,在t.expect语句之后会出错

我想知道beforeach是否破坏了一些东西,但我需要它来触发任何API调用,因为用户需要进行身份验证。我可以看到API请求在调试时被调用,我正在尝试拦截,但运气不好

testcafe版本:1.0.0 | | 0.23.3

测试代码

// have tried several urls, from exact to generic to ports.
const logger = RequestLogger("/api/", {
  logRequestHeaders: true,
  logRequestBody: true
});

const url = 'localhost:3000/reports';

fixture `Report`
  .page(url)
  .requestHooks(logger)
  .beforeEach(async (t: TestController) => {
    await loginAndNavToReports({ t });
  });

test("Reports", async (t: TestController) => {
  // this fires an api call through the /api/ path
  await t.click(".test-reportLaborSummary");
  // have tried several comparisons here, all fail or expect falsey to be truthy errors
  await t.expect(logger.count(() => true)).ok();
}

我怀疑TestCafe的运行速度比调用api的代码快

在使用logger对象之前,应等待它至少收到一个调用

要检查记录器是否收到呼叫,我建议这样做:

await wait_for_first_request();
const receivedCalls = logger.requests.length;
if (receivedCalls === 0) {
  throw new Error('api has not been called')
}


async function wait_for_first_request() {
  for (let i = 0; i < 50; i++) {
    await t.wait(100);
    if (logger.requests.length > 0 ) {
      return;  
    }
  }
}
wait wait_for_first_request();
const receivedcall=logger.requests.length;
如果(接收呼叫===0){
抛出新错误('尚未调用api')
}
异步函数等待第一个请求(){
for(设i=0;i<50;i++){
等待t.等待(100);
如果(logger.requests.length>0){
返回;
}
}
}

我也尝试过等待方法,但不完全是这样。我在调用之后和记录器之前直接放置了一个调试器,以便尝试手动拦截它。我会试一试,谢谢你的回答。事实证明,这不一定是解决方案,但却引导我朝着正确的方向前进。我正在运行上面建议的检查,但是为了让RequestLogger工作,我必须修改我的logger对象,以便对url使用正则表达式