2015-07-13 4 views
0

Как проверить, отправляется ли в Jasmine CustomEvent? Когда я пытаюсь запустить следующий код, я получаю ошибку: «ReferenceError: Не удается найти переменную: CustomEvent».тест на жасмин для javascript 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'); 
    }); 
}); 

ответ

0

Я думаю, что единственная проблема с код:

Вы используете toHaveBeenCalledWith метод вместо toHaveBeenCalled.

Бывший используется для проверки две вещи:

  1. ожидаемый метод называется
  2. Ожидаемый метод вызывается с правильными аргументами

Попробуйте запустить свой код here - Try Jasmine. После замены toHaveBeenCalledWith на toHaveBeenCalled.

Примечание: не передавайте аргументы последнему.

+0

Это, кажется, успешно работает в tryjasmine. ком. Однако, когда я использую https://github.com/gruntjs/grunt-contrib-jasmine (v0.9.0), я все еще вижу ту же ошибку - «ReferenceError: Не удается найти переменную: CustomEvent». – wwwuser

1

Expectation не выполняется, потому что eventSpy вызывается с { detail: 'foo'}

Также аргументы, передаваемые новый объект события, содержащий значения параметров, переданных в конструктор Event. Так что это никогда не тот же объект. Вы должны обеспечивать глубокое частичное равное с помощью partial matcher если вы используете Jasmine 2,0

expect(eventSpy).toHaveBeenCalledWith(jasmine.objectContaining({ 
    detail: 'foo' 
    })); 

Или есть headache, если вы используете версию ниже 2.0

Смежные вопросы