我最近在我的一个javascript函数中添加了e.preventDefault()
,这打破了我的茉莉花规格。我已经尝试了spyOn(e, 'preventDefault').andReturn(true);
,但我得到e
是未定义的错误。如何存根e.preventDefault()?
showTopic: function(e) {
e.preventDefault();
midParent.prototype.showTopic.call(this, this.model, popup);
this.topic.render();
}
it("calls the parent", function() {
var parentSpy = spyOn(midParent.prototype, "showTopic");
this.view.topic = {
render: function() {}
};
this.view.showTopic();
expect(parentSpy).toHaveBeenCalled();
});
答案 0 :(得分:19)
创建模拟对象(使用您需要的间谍)的另一种方法是使用jasmine.createSpyObj()
。
包含间谍名称的数组必须作为第二个参数传递。
var e = jasmine.createSpyObj('e', [ 'preventDefault' ]);
this.view.showTopic(e);
expect(e.preventDefault).toHaveBeenCalled();
答案 1 :(得分:1)
你必须传递一个对象,其中包含一个包含你的间谍的字段preventDefault:
var event = {preventDefault: jasmine.createSpy()}
this.view.showTopic(event);
expect(event.preventDefault).toHaveBeenCalled
答案 2 :(得分:0)
这与顶部的方法非常相似。我只是嘲笑了这个事件,并通过一个sinon间谍传递了preventDefault。不同之处在于我必须确定点击我测试的类型。
var e = {
type: 'click',
preventDefault: sinon.spy()
};
答案 3 :(得分:0)
不知道这种方法是否正确,但对我有用,请随时告诉我这是否不是一种好方法
第1步:使用用于阻止默认设置的功能创建一个eventStub
const eventStub = {
preventDeafult() {}
}
第2步:编写“ it”块:
it('should preventDefault when dragover event occurs', () => {
// step 3 goes here
// step 4 goes here
// step 5 goes here
});
第3步:创建间谍以阻止默认设置:
const spy = spyOn(eventStub, 'preventDefault');
step4:触发事件,例如,拖动鼠标并传递eventStub
component.triggerEventHandler('dragover', eventStub)
第5步:编写断言
expect(spy).tohaveBeenCalled()
注意:第4步中的“组件”是我们从灯具中获得的组件的实例 从fixture获取组件实例的示例:
let fixture = TestBed.createComponent(<your Component's Class Name>);
let component = fixture.componentInstance;
尝试并让我知道它是否对您有用,谢谢,Happyyy编码:-) !!!!!