Tor*_*ups 12 javascript dom-events jasmine jasmine-jquery
我正在写一个简单的点击处理程序,需要传入的事件(如此)
Thing = function($){
var MyObject = function(opts){
this.opts = opts;
};
MyObject.prototype.createSomething = function(){
var that = this;
$('#some_dom_element').live('click', function(e) {
that.doStuff(e);
});
};
MyObject.prototype.doStuff = function(e) {
//do some javascript stuff ...
e.preventDefault();
};
return MyObject;
}(jQuery);
Run Code Online (Sandbox Code Playgroud)
目前在我的jasmine规范中,我有一些东西可以监视我期望被调用的函数(但是因为它被调用e -not而没有args-我的断言失败了)
it ("live click handler added to the dom element", function(){
var doSpy = spyOn(sut, 'doStuff');
sut.createSomething();
$("#some_dom_element").trigger('click');
expect(doSpy).toHaveBeenCalledWith();
});
Run Code Online (Sandbox Code Playgroud)
我如何纠正这个"toHaveBeenCalledWith"按照我的预期工作?
UPDATE
我无法按原样获得接受的答案,但我能够稍微改变它,以下是我100%工作的例子
it ("should prevent default on click", function(){
var event = {
type: 'click',
preventDefault: function () {}
};
var preventDefaultSpy = spyOn(event, 'preventDefault');
sut.createSomething();
$("#some_dom_element").trigger(event);
expect(preventDefaultSpy).toHaveBeenCalledWith();
});
Run Code Online (Sandbox Code Playgroud)
And*_*rle 14
你必须触发你自己的事件传递stopPropagation方法的间谍,因为你想测试事件是否被停止.
var event = {
type: 'click',
stopPropagation: function(){}
}
var spy = spyOn(event, 'stopPropagation');
$('#some_dom_element').trigger(event);
expect(spy).toHaveBeenCalled();
Run Code Online (Sandbox Code Playgroud)
注意:当您监视要测试的对象时会出现代码异味,因为您开始测试类的内部行为.把你的功能想象成一个黑盒子,只测试你投入的东西并离开.在您的情况下,重命名函数将破坏测试,而代码仍然有效.
| 归档时间: |
|
| 查看次数: |
16546 次 |
| 最近记录: |