我该如何解决Jest消息“测试运行完成一秒钟后Jest没有退出。”?

时间:2018-10-08 07:31:14

标签: javascript async-await jestjs frisby.js

我们将frisby.js用于自动化API测试,frisby.js使用Jest作为测试运行程序。现在,在我们的示例中,我们在执行所有API测试之前进行了全局设置,在测试执行之后,我们进行了全局拆卸。

我在jest.conf.js中设置的此全局设置和拆卸:

globalSetup: './jest.globalSetup.js',
globalTeardown: './jest.globalTeardown.js',

因此,全局拆卸会导出一个异步函数,该函数在所有测试套件之后都会触发一次。在我们的全球拆解中,我们正在使用外部报告引擎生成测试覆盖率和测试报告:

const coverage = require('./test-coverage-generator');
const XunitViewerCli = require('xunit-viewer/cli');

module.exports = async function() {
  await coverage.generateTestCoverage();
  await XunitViewerCli({
      results: './api/reporting/test-reports/jest-junit-report-' + process.env.API_TEST_FOLDER + '.xml',
      ignore: [],
      output: './api/reporting/test-reports/jest-junit-report-' + process.env.API_TEST_FOLDER + '.html',
      title: 'Test Report API Tests for ' + process.env.API_TEST_FOLDER,
      port: false,
      watch: false,
      color: true,
      filter: {}
  });
}

报告生成是为什么Jest在测试结束时生成消息Jest did not exit one second after the test run has completed.的问题,因为报告生成需要一秒钟以上的时间。

因此,我不想再看到此消息,因为此消息很混乱。也许可以在全局范围内将默认的Jest超时增加一秒钟,还是有其他可能的解决方法来阻止此消息?

1 个答案:

答案 0 :(得分:0)

我遇到了类似的事情,解决方案是从globalTeardown模块导出的函数返回一个Promise。这样的事情应该可以解决问题:

module.exports = async function() {
  await coverage.generateTestCoverage();
  // returns a promise
  return XunitViewerCli({
      results: './api/reporting/test-reports/jest-junit-report-' + process.env.API_TEST_FOLDER + '.xml',
      ignore: [],
      output: './api/reporting/test-reports/jest-junit-report-' + process.env.API_TEST_FOLDER + '.html',
      title: 'Test Report API Tests for ' + process.env.API_TEST_FOLDER,
      port: false,
      watch: false,
      color: true,
      filter: {}
  });
}