为什么添加console.log语句可以防止测试超时?

时间:2018-09-06 05:26:01

标签: javascript node.js timeout integration-testing puppeteer

我有一些可以在本地运行的代码,使用Supertest进行了测试,但是当相同的测试在CircleCI上运行时,由于超时而失败。

有问题的代码是

for (const id of ids) {
  const urls = await scrapeLinks(id) // invokes puppeteer on a dockerised mock server
  await connectUrls(fbId, urls) // updates database using sequelize
}

在本地运行可以正常工作。

在CircleCI上运行相同的测试,此代码需要很长时间才能完成,并且测试超时。

但是但是,如果我添加几条console.log行,则测试不会超时

for (const id of ids) {
  console.log('start', id)
  const urls = await scrapeLinks(id) // invokes puppeteer on a dockerised mock server
  console.log('urls', urls)
  await connectUrls(fbId, urls) // updates database using sequelize
  console.log('end', id)
}

在本地和CircleCI上运行都能正常运行的测试。

我的简单解决方法当然是将测试的超时时间从2秒延长到5秒。

但是我的问题是,为什么在每个步骤之后添加console.log行,会使代码更快地完成?

1 个答案:

答案 0 :(得分:0)

这很可能是由于CircleCI的no_output_timeout属性所定义的:

  

该命令可以在没有输出的情况下运行的时间。字符串是带有单位后缀的十进制,例如“ 20m”,“ 1.25h”,“ 5s”(默认值:10分钟)

因此,如果您的程序超过了此属性设置的给定时间而不提供输出,则程序将超时。