在茉莉花测试中记录e.preventDefault()

时间:2013-04-11 05:11:21

标签: javascript jasmine

我最近在我的一个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();
});

4 个答案:

答案 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编码:-) !!!!!