javascript - 如何在 Jasmine Node.js 中测试事件?

标签 javascript node.js events jasmine

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

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

片段:

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

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

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

最佳答案

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

  1. 初始设置和事件调用(即 write 并将某些变量设置为 false)。
  2. waitsFor 方法,其中变量设置为 true。
  3. 最终期望测试,确保变量已设置为 true。

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

关于javascript - 如何在 Jasmine Node.js 中测试事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15494402/

相关文章:

javascript - 如何在没有回发的情况下运行 Jscript

node.js - Puppeteer:如何处理多个标签?

events - AngularJS:如何在 promise 完成后防止事件的默认()?

javascript - Data.filter 在 IE 8 中不起作用?

javascript - 在google maps api中移动一个圆圈

javascript - 当附加到元素的顶级类时,主干 View 事件不会触发

javascript - 如何在代理下的node js中发送HTTP请求

node.js - Coffeescript Cakefile - cmdline 选项数组

java - Keycloak:订阅事件,例如创建用户以触发网络服务

javascript - 自定义事件记录倍数