Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jasmine测试中的stubing e.preventDefault()_Javascript_Jasmine - Fatal编程技术网

Javascript jasmine测试中的stubing e.preventDefault()

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

我最近在我的一个javascript函数中添加了一个
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;