我在 mocha 中为使用 UDP 在客户端和服务器之间发送消息的 node.js 客户端/服务器应用程序编写了一系列测试。
我的测试主要在“客户端”,将服务器视为一个块框并验证来自服务器的响应。问题是一些“对话”跨越多个消息发送和接收事件,有时长达几十秒。it
有一个 1,000 行的测试脚本,顶部只有一个巨大的调用,这似乎很奇怪——我想在“对话”期间运行多个测试。我想要更多的粒度,如果测试的特定部分失败(例如,来自服务器的前 2 个响应很好,但第 3 个响应格式错误),则测试的特定部分失败,但初始测试通过。
我已经研究过嵌套调用it
(似乎不起作用)并且最近将调用it
分隔在单独的步骤中,每个步骤代表在客户端发送或接收一条消息。
这种方法似乎不起作用,因为 mocha 在第一步之后终止节点应用程序,从不等待套接字从服务器接收更多响应并完成其余步骤。
如何it
在 mocha 中创建“事件”调用?
第一个将在测试开始时调用,然后每个连续的it
只会在收到来自服务器的响应后调用。我正在寻找任何能够让我在测试中获得粒度的解决方案,而无需在我的it
调用中编写大量函数,其中包括客户端和服务器之间的数十条消息。在事先已经发送和接收许多消息的对话上下文之外尝试验证来自服务器的响应也是不行的,因为这些消息决定了服务器响应的有效性。
请参阅我在https://gist.github.com/4490219创建的示例实现。您可以看到结果是第一个测试通过但第二个测试从未执行,即使套接字显然仍处于打开状态并等待来自服务器的请求。
(PS 为要点的文本格式道歉 - 我在创建它时似乎无法选择 Javascript 作为语言类型)
(PPS 我真的不想在每一步开始时都使用一系列 setTimeout 调用来让 mocha 认为它必须等待)。