2

我正在编写一个使用串行端口通信的节点模块。使用 write() 调用所有传出消息,并且所有传入消息都会引发事件。

我希望能够测试传入的消息。当调用 write 时,传入消息需要很短的时间(在良好条件下不到 1/10 秒)。

片段:

it("can receive", function() {
    btReader.on('dataReceived', function(data){
        console.log(data);
        expect(data).toBeDefined();
    });
});

这样它只会制作事件处理程序,但会在引发任何事件之前完成完整的测试。然后,当引发事件时,代码将执行,但不会真正进行测试。

我是否必须使用 waitsFor 方法,然后在事件处理程序中将 bool 设置为 true?

4

1 回答 1

2

由于您的事件是异步的,是的,您将需要使用该waitsFor方法来测试处理程序是否已被调用。你完全正确,你需要创建一个变量来测试。所以你最终得到的是测试的 3 个部分:

  1. 初始设置和事件调用(即write和一些变量设置为假)。
  2. waitsFor变量设置为 true的方法。
  3. 确保变量已设置为 true 的最终期望测试。

waitsFor方法需要一个超时参数,因此如果运行您的函数需要 200 毫秒,那么请给超时一个合理的值,以确保它永远不会意外失败。当然,您不必像上面那样进行简单的测试,您可以将变量设置为 write 方法所做的任何事情,并确保它已经完成了它应该做的事情。

于 2013-03-19T09:05:44.733 回答