【问题标题】:Jest did not exit one second after the test run has completed测试运行完成后一秒 Jest 没有退出
【发布时间】:2019-06-15 19:40:14
【问题描述】:

运行测试用例出现如下错误:

Jest 在测试运行完成后一秒钟没有退出。 这通常意味着在您的测试中没有停止异步操作。考虑使用 --detectOpenHandles 运行 Jest 来解决此问题。

我使用--ForceExit--detectOpenHandles 运行了测试用例。但是我没有解决这个错误。

【问题讨论】:

  • 你能分享你的代码吗?
  • @pathan,感谢您的回复。 test('Fetch Token', async(done)=> { await getToken('DEV', 'myApp', (token) => { console.log("AuthToken: ",authToken); expect(authToken).toBeFalsy( ); }); 完成(); });

标签: reactjs react-native jestjs


【解决方案1】:
test("Fetch Token ", async done => {
  await getToken("DEV", "myApp", token => {
    console.log("AuthToken: ", authToken);
    expect(authToken).toBeFalsy();
  });
  done();
});

2 个可能的原因:

  • 您的异步请求 getToken 使用了错误的变量,而不是 authToken,而是 token
test("Fetch Token ", async done => {
  await getToken("DEV", "myApp", token => {
    console.log("AuthToken: ", token);
    expect(token).toBeFalsy();
  });
  done();
});
  • 您的异步请求响应时间过长,请尝试增加开玩笑超时jest.setTimeout(5000)

建议

当你使用 async-await 时,你不需要使用 done。

  • 使用异步等待
test("Fetch Token ", async done => {
  const authToken = await getToken("DEV", "myApp", token => {
    return token;
  });
  console.log("AuthToken: ", authToken);
  expect(authToken).toBeFalsy();
  done();
});
  • 没有异步等待
test("Fetch Token ", (done) => {
 getToken("DEV", "myApp", token => {
    console.log("AuthToken: ", token);
    expect(token).toBeFalsy();
    done();
  });
});

【讨论】:

    【解决方案2】:
    1. 检查是否有未关闭的数据库/redis 连接。
    2. 检查是否有未清除的计时器。

    【讨论】:

    • 虽然这是一件好事,但似乎对done() 的调用位于最后一个操作之外,我假设getToken 的第三个参数也是异步的。你可以试试 test('Fetch Token', async (done) => { await getToken('DEV', 'myApp', (token) => { console.log('AuthToken: ', authToken); expect(authToken) ).toBeFalsy(); 完成(); }); });代替?
    猜你喜欢
    • 2018-12-08
    • 2019-02-05
    • 2021-03-01
    • 2021-03-28
    • 1970-01-01
    • 2020-08-25
    • 2021-12-26
    • 2019-09-16
    • 1970-01-01
    相关资源
    最近更新 更多