如何在mocha中创建“evented”测试

时间:2013-01-09 03:20:30

标签: node.js testing mocha

我在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认为它必须等待)。

1 个答案:

答案 0 :(得分:-1)

解决方案是使用嵌套it的组合(如果在每个嵌套describe之间使用it实际上可以实现)并使用注册{{1}只有当响应从服务器到达时才会调用it。{/ p>

对于未来的googlers,我创建了另一个要点,以显示此问题的解决方案。

https://gist.github.com/Trindaz/4490646