心跳监视器和单元测试它的方法
Heartbeat monitor and unit testing it in how to?
我有一个"服务模块",它侦听周期性的心跳(通过socket.io),然后如果错过了心跳,则在事件总线(Backbone.Events)上发布事件。此外,如果稍后心跳恢复,则会发布事件。
我的单元测试看起来像这样:
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()函数之外。
您可以使用SinonJS的假计时器将时钟向前设置2次,而不是使用setTimeout。
相关文章:
- 如何在Angular单元测试中从另一个控制器的rootScope将方法添加到rootScope中
- 如何在ember单元测试中模拟_super()方法
- Jasmine单元测试在监视服务方法时失败
- 如何用mocha和rewire模拟node.js单元测试中的Q方法
- AngularJS列出了所有单元测试方法
- React中的单元测试非静态方法
- 将Jasmine JavaScript单元测试与TFS Build CI集成的简单方法
- 如何使用 Jasmine 对链式方法进行单元测试
- 无法对原型方法进行单元测试
- 单元测试控制器,在控制器中具有 $state.go 方法
- 如何在 Ember-CLI 中单元测试类方法
- Sails.js:从单元测试调用控制器方法
- 在 yeoman 生成器中对单个方法进行单元测试的推荐方法是什么
- 被测方法出现在单元测试中,而不是出现在操作中
- 控制器方法在 AngularJs 中使用 Karma 调用 Jasmine 单元测试套件
- 如何访问React中的方法进行单元测试
- 单元测试——方法中的模拟方法
- 心跳监视器和单元测试它的方法
- 如何检查方法是否调用了茉莉花单元测试
- 在Nodejs中对事件进行单元测试的最佳方法是什么?