【问题标题】:Error: write EPIPE when running Jest tests on Gitlab CI's personal VPS错误:在 Gitlab CI 的个人 VPS 上运行 Jest 测试时编写 EPIPE
【发布时间】:2021-11-24 13:08:20
【问题描述】:

所以,我现在要做的很简单,在 Gitlab CI 创建一个工作来运行我在我自己的个人 VPS 上所做的测试。我使用 NestJS 作为我的后端。问题是,由于某种原因,一个/一些测试返回了write EPIPE 错误。此外,我得到的唯一模式是错误仅发生在使用多部分表单上传图像但并非始终如一地发生的测试中,所以就像我运行 3 次时一样,有时write EPIPE 仅发生 1 次,有时两次,有时没有。

这是我在测试中使用多部分表单上传图片的代码 sn-ps:

it('should be able to upload image', () => {
    return request(myHost)
      .post('/upload-image')
      .expect(200)
      .attach('image', './testimage.jpg')
      .then((res): any => {
        expect(res.body).toEqual({});
      });
  });

要了解更多信息,testimage.jpg 只有 13.9kB,所以它不是一个大文件。

我的节点版本:14.16.0,Jest 版本:26.6.3,NestJS 版本:7.6.15,Ubuntu 版本:20.04

我尝试的是安装libpng-dev 包,libfontconfig 包,并使用-- --silent 标签运行测试,但所有这些都不起作用。

【问题讨论】:

  • 我遇到了一个类似的问题,但我在某些地方错过了等待。如果您增加图像大小,它应该更频繁地发生,因为该过程需要更多时间并且开玩笑刚刚完成。它可能只发生在 gitlab 上,因为那里的系统较慢。为了在我的本地系统上重现它,我使用了 jest 客户端选项 --runInBand,然后它只使用一个线程
  • @CordlessWool 我终于让它工作了,请参阅下面的答案。另外,感谢您的帮助

标签: node.js jestjs nestjs


【解决方案1】:

我终于通过将Connection 标头设置为keep-alive 来让它工作,以测试具有write EPIPE 错误的测试。我能给出的最好的解释是当图像上传时,连接以某种方式关闭,所以上传过程停止了。这就解释了为什么我在测试中添加console.log(err) 时没有错误,而且我的后端也没有错误。

EPIPE的错误解释也提到了这个,可以看这里:

来源:https://nodejs.org/api/errors.html,常见系统错误部分。

我不明白的部分问题是为什么其他上传图像测试没有遇到这个 EPIPE 错误。我肯定有超过 20 个具有上传图像部分的测试,但只有

例如,我有 20 次上传图片的测试,命名为 test1test2 等。由于某种原因,只有一些测试遇到了 EPIPE 错误,假设只有test1test8 得到它(在实际情况下,得到它的测试是随机的)。然后在test1test8之间,有时他们也得到它,有时他们没有,但范围总是一样的(在第一次运行时,得到EPIPE错误的测试是test1test3 , test5, test6. 在第二次运行时,得到它的测试可能与第一次不同,即test1test3test5test7test8,但从未离开test8)。

也许有人可以解释一下。

【讨论】:

    猜你喜欢
    • 2020-09-14
    • 2014-07-07
    • 1970-01-01
    • 2021-09-28
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多