我正在使用nodejs中的服务器端代码编写测试。测试是用茉莉花2编写的。我正在使用grunt-jasmine-nodejs运行测试。
服务器端代码使用setInterval和clearInterval等定时器。我想监视这些计时器,看看这些计时器是否被调用。
服务器端代码 - server.js
exports.socketHandler = function(socket){
...
getResultsInterval = setInterval(getResults, INITIAL_POLL, onResults);
getResultsTimeout = setTimeout(function() {
clearInterval(getResultsInterval);
}, 1 * 60 * 1000);
}
测试
var server = require("../../server");
describe('Test the Server', function(){
beforeEach(function(done)){
....
done();
}
it ('should be able to clear timers', function(done){
spyOn(global, 'setInterval');
spyOn(global, 'clearInterval');
server.socketHandler(socket);
expect(global.setInterval).toHaveBeenCalled();
expect(global.clearInterval).toHaveBeenCalled();
}
测试失败并显示消息 -
错误:已调用的spy setInterval已被调用。 错误:已调用间谍clearInterval。
但是全局对象具有setInterval方法。
任何帮助都将不胜感激。
由于
答案 0 :(得分:0)
我不能因此而受到赞誉,但当我问了类似的东西时,我得到了这个答案;
beforeEach(function() {
timerCallback = jasmine. createSpyObj("setInterval");
jasmine.clock().install();
});
afterEach(function() {
jasmine.clock().uninstall();
});
it("causes a timeout to be called", function() {
setTimeout(function() {
timerCallback();
}, 1000);
expect(setInterval).not.toHaveBeenCalled();
jasmine.clock().tick(1001);
expect(setInterval).toHaveBeenCalled();
});