У меня есть «сервисный модуль», который прослушивает периодические биения (поверх socket.io), а затем, если упущено биение, публикуется событие на шине событий (Backbone.Events). Также, если сердечный ритм возобновится позже, он публикует событие.Монитор Heartbeat и блок, проверяющий его в javascript - как?
Мой блок тест выглядит примерно так:
describe('Heartbeat service', function() {
var HeartbeatService;
var heartbeatInterval = 1;
//the server is expected to send heartbeats FASTER actually.
//otherwise we risk false alarms
jasmine.require(['services/HeartbeatService'], function(Service) {
HeartbeatService = Service;
});
/*Since these tests use setInterval, it'd be erroneous to allow
mocks to be overwritten by another test. Thus not using beforeEach()*/
function createMocks(){
var mockEventAggregator = jasmine.createSpyObj('Events',['trigger']);
return {
target : new HeartbeatService(heartbeatInterval, mockEventAggregator),
ea : mockEventAggregator
};
}
it('should raise an event on the FIRST missed beat', function() {
var mocks = createMocks();
mocks.target.start();
setTimeout(function(){
expect(mocks.ea.trigger).toHaveBeenCalled();
}, 2);
});
//..other similar tests
});
Моя нелюбовь для этого теста является то, что, если он не работает, то вполне вероятно, что инструмент отчетности будет список неудач под другим испытанием - поскольку фактическое утверждение будет происходить вне функции it().
Надеюсь, вы не контролируете реальных пациентов с помощью javascript;) – mpm