2015-11-20 1 views
0

Я очень новичок в тестировании Chai. Я не могу найти хороший пример. В принципе, то, что я хочу, это проверить, произошло ли событие.Шпионаж/тестирование, если триггер на обработчике событий работает с использованием Chai

на моем patientInfo.js, код, чтобы вызвать событие является

import PatientBus from 'backbone.radio'; 
patientAdded() { 
    PatientBus.trigger('patient:added'); 
}, 

тогда на моем patientEvents.js

import PatientBus from 'backbone.radio'; 
this.listenTo(PatientBus, 'patient:added', this.onPatientAdded); 

onPatientAdded: function onPatientAdded() { 
    // blah blah blah 
} 

Забыл сказать, я использую марионетка радио. Коды обработчика событий выше работают отлично. Теперь мне нужен тест chai, который проверяет, получил ли слушатель события триггер или запрос на вещание. Я не знаю, с чего начать и как я его напишу.

+0

вы можете использовать шпионов, от 'sinon' с вашим chai: http://sinonjs.org/ – Sgnl

ответ

1

Как упоминалось в @Sgni, вам нужно будет следить за своей функцией, чтобы: 1) знать, была ли она вызвана, и 2) проверить ее возвращаемое значение. Синтаксис Sinon для этого является:

sinon.spy(yourObject, 'onPatientAdded'); 

Чтобы дать вам некоторую интуицию для того, как это работает, перечислите документы Sinon это как пример:

function once(fn) { 
    var returnValue, called = false; 
    return function() { 
     if (!called) { 
      called = true; 
      returnValue = fn.apply(this, arguments); 
     } 
     return returnValue; 
    }; 
} 

Как вы можете видеть, это оборачивает оригинал функция в замыкании, которая сохраняет ссылки на возвращаемое значение вашей исходной функции и вызывалась ли функция.

Sinon-Chai только дает хороший синтаксис, так что вы можете сделать читаемым утверждения вроде следующего:

expect(yourObject.onPatientAdded).to.have.been.calledOnce; 
expect(yourObject.onPatientAdded).to.have.returned(something); 

Так что да, есть, казалось бы, много магии, но магия исходит от использования Синона JavaScript закрытие и умение использовать свойства объекта Sinon-Chai.