测试运行完成后,Jest并没有退出一秒钟(使用Nuxt和Jest)

时间:2018-10-02 11:19:35

标签: travis-ci jestjs nuxt.js

出于未知原因,我的Jest测试似乎在我的CI末尾通过Travis阻止了。

Travis日志如下:

  

测试套件:5个通过,总共5个
  测试:31次通过,共31次
  快照:总计0个
  时间:21.993s

     

测试运行一秒钟后,Jest没有退出。

     

这通常意味着您的测试中没有停止异步操作。考虑使用--detectOpenHandles运行Jest来解决此问题。

请注意,--detectOpenHandles不会显示任何内容。

您可以看到我的测试通过了,但是没有退出,即使我执行了以下操作:

describe('[INTEGRATION] Index.test.js', () => {
  beforeAll(async () => {
    const rootDir = resolve(__dirname, '../..');
    let config = {};
    // ... config

    nuxt = new Nuxt(config);
    new Builder(nuxt).build();
    await nuxt.listen(3000, 'localhost');
    homePage = await nuxt.renderAndGetWindow('http://localhost:3000/');
  }, 30000);

  // This is called after every suite (even during the CI process)
  afterAll(() => {
    nuxt.close();
  });

  // ... my tests
});

我的测试在本地可以正常运行,但是只能在通过Travis进行CI的过程中做到这一点。

这是我的Jest配置文件的内容:

module.exports = {
  verbose: true,
  moduleFileExtensions: ['js', 'vue', 'json'],
  transform: {
    '^.+\\.js$': 'babel-jest',
    '.*\\.(vue)$': 'jest-vue-preprocessor',
  },
  setupTestFrameworkScriptFile: './jest.setup.js',
  silent: true,
};

其中jest.setup.js包含jest.setTimeout(30000);

最后,这是我的.travis.yml配置文件:

language: 'node_js'
node_js: '8'

cache:
  directories:
    - 'node_modules'

before_script:
  - npm run build
  - npm run lint
  - npm install
  - npm run generate

什么可能导致此问题?超时不是应该的,因为它是执行我的所有集成测试所必需的,并且我在集成测试套件后关闭了nuxt会话。

从昨天工作到今天,没有什么大变化。

1 个答案:

答案 0 :(得分:0)

我认为您可能需要确保等待nuxt.close()呼叫解决。 It looks like close is asynchronous并发出一个承诺,该承诺在实际关闭连接时会解决。因此,Jest可能在异步操作完成之前完成了操作。这实际上是一个时序问题,因此CI机器的运行情况可能会稍有不同,从而导致close调用所花费的时间比在本地机器上花费的时间更长。

尝试将afterAll更改为以下内容:

afterAll(async () => { await nuxt.close(); });