javascript CustomEvent的jasmine单元测试

jasmine unit test for javascript CustomEvent

本文关键字:单元测试 jasmine CustomEvent javascript      更新时间:2023-09-26

如何在jasmine中测试CustomEvent是否被调度?当我尝试运行以下代码时,我得到错误:"ReferenceError:找不到变量:CustomEvent"。

function testCustomEvent() {
  window.dispatchEvent(new CustomEvent('myCustomEvent', {
    detail: 'foo'
  }));
}
describe('testCustomEvent', function() {
  it('dispatches myCustomEvent', function() {
    var eventSpy = jasmine.createSpy();
    window.addEventListener('myCustomEvent', eventSpy);
    testCustomEvent();
    expect(eventSpy).toHaveBeenCalledWith('foo');
  });
});

期望不被满足,因为eventSpy被{ detail: 'foo'}调用

同样,传递的参数是一个新的事件对象,其中包含发送给event构造函数的形参的值。所以它从来不是同一个物体。如果你使用的是Jasmine 2.0

,你将不得不通过使用部分匹配器来强制一个深度部分相等
expect(eventSpy).toHaveBeenCalledWith(jasmine.objectContaining({
    detail: 'foo'
  }));

或者使用2.0以下的版本会感到头疼

我认为你的代码唯一的问题是:

您使用的是toHaveBeenCalledWith法而不是toHaveBeenCalled法。

Former用于检查两件事:

  1. 期望的方法被称为
  2. 使用正确的参数调用期望的方法

试试在这里运行你的代码-试试Jasmine。用toHaveBeenCalled代替toHaveBeenCalledWith后。

注意,不要给后者传递任何参数