监视/测试事件处理程序上的触发器是否使用Chai工作
Spying/testing if trigger on event handler works using Chai
我对Chai测试很陌生。我找不到好的例子。基本上,我想做的是检查事件是否被触发。
在我的patientInfo.js上,触发事件的代码是
import PatientBus from 'backbone.radio';
patientAdded() {
PatientBus.trigger('patient:added');
},
然后在我的patientEvents.js 上
import PatientBus from 'backbone.radio';
this.listenTo(PatientBus, 'patient:added', this.onPatientAdded);
onPatientAdded: function onPatientAdded() {
// blah blah blah
}
忘了说,我在用Marionette收音机。上面的事件处理程序代码运行良好。现在,我想要一个chai测试,它将检查事件的侦听器是否接收到触发器或广播请求。我不确定从哪里开始以及如何编写。
正如@Sgni所提到的,您需要监视您的函数,以1)知道它是否被调用,2)检查它的返回值。这样做的Sinon语法是:
sinon.spy(yourObject, 'onPatientAdded');
为了给你一些关于这是如何工作的直觉,Sinon的文档列出了一个例子:
function once(fn) {
var returnValue, called = false;
return function () {
if (!called) {
called = true;
returnValue = fn.apply(this, arguments);
}
return returnValue;
};
}
正如您所看到的,它将原始函数封装在一个闭包中,该闭包保留对原始函数的返回值的引用,以及是否调用了该函数。
Sinon Chai只是给了你很好的语法,所以你可以做出如下可读的断言:
expect(yourObject.onPatientAdded).to.have.been.calledOnce;
expect(yourObject.onPatientAdded).to.have.returned(something);
是的,似乎有很多神奇之处,但神奇之处来自Sinon对JavaScript闭包的使用和Sinon Chai对对象属性的巧妙使用。
相关文章:
- 访问布局信息是否也会导致浏览器重排
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 如何检测是否有溢出
- jQuery中是否内置了任何字符串格式化函数
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 测试索引值是否等于某个数字的倍数
- Fancybox是否将Click事件静音
- 主干-不管怎样,检查事件以前是否绑定过
- YUI3 IO实用程序是否可以根据给定的内容类型标头值自动序列化数据
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 是否可以禁用jquery中的单个单选按钮
- 是否可以从父类访问子类的属性
- 是否可以控制获取哪些Google地图脚本(JavaScript API)
- 使用 Chai - 如何检查对象属性是否包含 DOM 元素
- 如何检查复选框是否与Protractor、CucumberJS和Chai一起选中
- 监视/测试事件处理程序上的触发器是否使用Chai工作
- 我如何使用chai.js来测试我的函数是否创建了一个数组