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