[vercel/next.js]测试:使用更好的方式获取测试应用程序的端口

2024-05-15 584 views
6

使用 http 模块server.listen()绑定到随机可用端口。

回答

1

仍然不是很稳健。为什么不提供临时端口listen()

8

测试中的随机行为很好,但也可能导致测试随机失败,有时很难追踪(在我以前的公司看到过)。使用预定义的端口列表测试多个初创公司怎么样?

3

你能详细说明一下吗?临时端口错误如何处理?

9

测试中的随机行为很好,但也可能导致测试随机失败,有时很难追踪

这不是真的。我们使用portfinder,它会提供可用的端口。它从 8000 开始。这里我们将其随机化。

2

仍然不是很稳健。为什么不使用listen()给出的临时端口?

这是个好主意。我会更新。

8

@rauchg 按照您的建议进行了更新。

5

你能详细说明一下吗?

我只是在一般情况下说话。基于随机行为的测试是不可重复的。它有时可能会失败,但并非每次都会失败,可能会令人非常不安。测试(显式或非显式)由 3 部分组成:“给定”、“何时”和“然后”。通过阅读源代码来了解“给定”是非常有帮助的。

5

但端口的随机性对结果没有影响,对吗?特别考虑到临时端口(通过listen())总是给我们一个自由端口。

2

如果随机性对结果没有影响,为什么要使用它?在这种情况下为什么要做这个 PR?

0

因为假设您在端口 8000 上运行某些内容,则测试会因错误原因而失败

4

我只是不明白为什么该端口一开始会随机不可用。通常测试环境的目的是提供可重现的上下文。

不管怎样,可以放弃我的评论,只是随机性的主题触发了一些前世在 F-Secure 的敏感记忆?

4

我希望该端口在测试自动化环境中不会随机不可用?那么问题是在某些开发人员的笔记本电脑上出现的吗?然后,除了随机性之外的其他选项可能是允许开发人员在运行测试时配置端口(使用合理的默认值)。

@rauchg,正如您在其他地方所说,在可能的情况下,显式优于隐式。

3

我想我们在这里开始随机化基本端口。但现在我们正在做别的事情。我们让节点的 http 模块选择一个可用端口并用于测试应用程序。

8

随机端口的另一个问题是,它可能隐藏了这样一个事实:测试的另一个实例可能已被卡住并在计算机的其他地方运行。

0

@sedubois 我们总是并行运行测试,Jest 知道如何很好地报告它们。

它可能隐藏了这样一个事实:测试的另一个实例可能已被卡住并在计算机的其他地方运行。

我们暂时忽略这个案例。让我们一件一件地做事吧。我们可以创建一个新问题并继续。

与当前设置相比,这是一个很好的改进,因为我们使用的时间更长 portfinder

2

3

我只是不明白为什么该端口一开始会随机不可用。通常测试环境的目的是提供可重现的上下文。

@sedubois 当然,但我们也在 , 上运行测试prepushprepublish因此测试必须在开发人员机器上有用

8

感谢您的输入@sedubois,非常感谢

8

我觉得这样合并挺好的。

0

太棒了❤️