10

我最近e.preventDefault()在我的一个 javascript 函数中添加了一个,它破坏了我的 jasmine 规范。我已经尝试过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

4 回答 4

28

创建模拟对象(使用您需要的间谍)的另一种方法是使用jasmine.createSpyObj(). 包含间谍名称的数组必须作为第二个参数传递。

var e = jasmine.createSpyObj('e', [ 'preventDefault' ]);
this.view.showTopic(e);
expect(e.preventDefault).toHaveBeenCalled();
于 2013-04-11T09:23:53.607 回答
1

您必须传递一个带有字段 preventDefault 的对象,该字段包含您的间谍:

var event = {preventDefault: jasmine.createSpy()}
this.view.showTopic(event);
expect(event.preventDefault).toHaveBeenCalled
于 2013-04-11T08:59:51.410 回答
1

不知道这种方法是否正确,但对我有用,请随意判断这是否不是一个好方法

step1:创建一个带有防止默认功能的eventStub

 const eventStub = {
      preventDeafult() {}
    }

step2:编写'it'块:

it('should preventDefault when dragover event occurs', () => {
  // step 3 goes here
  // step 4 goes here
  // step 5 goes here
});

step3:创建间谍以防止默认:

const spy = spyOn(eventStub, 'preventDefault');

step4:触发事件让我们说dragover并传递eventStub

  component.triggerEventHandler('dragover', eventStub)

step5:编写断言

expect(spy).tohaveBeenCalled()

注意:步骤4中的“组件”是我们从fixture获取组件实例的实例,用于从fixture获取组件实例:

let fixture = TestBed.createComponent(<your Component's Class Name>);
let component = fixture.componentInstance;

试着让我知道它是否适合你谢谢你,,,,Happyyy编码:-) !!!!!

于 2020-10-19T08:54:17.217 回答
0

这与顶部的方法非常相似。我只是模拟了这个事件,并通过一个 sinon 间谍传递了 preventDefault。不同之处在于我必须确定点击我的测试的类型。

var e = {
    type: 'click',
    preventDefault: sinon.spy()
};
于 2015-08-05T16:26:45.340 回答