出于未知原因,我的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
会话。
从昨天工作到今天,没有什么大变化。
答案 0 :(得分:0)
我认为您可能需要确保等待nuxt.close()
呼叫解决。 It looks like close
is asynchronous并发出一个承诺,该承诺在实际关闭连接时会解决。因此,Jest可能在异步操作完成之前完成了操作。这实际上是一个时序问题,因此CI机器的运行情况可能会稍有不同,从而导致close
调用所花费的时间比在本地机器上花费的时间更长。
尝试将afterAll
更改为以下内容:
afterAll(async () => {
await nuxt.close();
});