Javascript jasmine测试中的stubing e.preventDefault()
我最近在我的一个javascript函数中添加了一个Javascript jasmine测试中的stubing e.preventDefault(),javascript,jasmine,Javascript,Jasmine,我最近在我的一个javascript函数中添加了一个e.preventDefault(),它打破了我的jasmine规范。我尝试了spyOn(e,'preventDefault')。andReturn(true)但我得到的e是未定义的错误。如何存根e.preventDefault()? 您必须传递一个包含spy的默认字段的对象: var event = {preventDefault: jasmine.createSpy()} this.view.showTopic(event); expect
e.preventDefault()
,它打破了我的jasmine规范。我尝试了spyOn(e,'preventDefault')。andReturn(true)代码>但我得到的e
是未定义的错误。如何存根e.preventDefault()?
您必须传递一个包含spy的默认字段的对象:
var event = {preventDefault: jasmine.createSpy()}
this.view.showTopic(event);
expect(event.preventDefault).toHaveBeenCalled
创建模拟对象的另一种方法(使用您需要的间谍)是使用jasmine.createSpyObj()
。
包含间谍名称的数组必须作为第二个参数传递
var e = jasmine.createSpyObj('e', [ 'preventDefault' ]);
this.view.showTopic(e);
expect(e.preventDefault).toHaveBeenCalled();
这与上面的方法非常相似。我只是嘲弄了这件事,并通过了一个sinon间谍的调查。不同的是,我必须识别一个点击测试的类型
var e = {
type: 'click',
preventDefault: sinon.spy()
};
我不知道这种方法是否正确,但对我来说很有效,请随时告诉我这是否是一种好方法
步骤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');
步骤4:触发事件,比如说dragover并传递事件存根
component.triggerEventHandler('dragover', eventStub)
步骤5:编写断言
expect(spy).tohaveBeenCalled()
注意:步骤4中的“组件”是我们从fixture中获得的组件实例
从夹具获取组件实例的示例:
let fixture = TestBed.createComponent(<your Component's Class Name>);
let component = fixture.componentInstance;
let fixture=TestBed.createComponent(解决方案不起作用吗?@Asad不,这就是我删除它的原因您的spyOn(e,'preventDefault')
可以,但您没有将e
传递到it()
中的showTopic()
。这就是重点吗?
let fixture = TestBed.createComponent(<your Component's Class Name>);
let component = fixture.componentInstance;