我一直在编写健身 webkit 应用程序的服务器端。HTTP 调用被发送到服务器以在应用程序中启动基于时间的“锻炼”。我一直在使用 jasmine-node 进行测试,到目前为止它一直在工作。唯一不起作用的是如果我试图使用 sinon 假计时器。
我遇到的问题是测试没有通过下面代码中的 it 语句。如果我删除 clock.tick 函数调用,它会起作用。如果时钟已经滴答了 120000 毫秒,为什么它不会从 it 语句继续前进?如果在 get 请求的 .end 中没有注释掉 clock.restore() ,请求永远不会完成。我无法弄清楚问题究竟出在哪里(jasmine-node vs express vs supertest)。在那之后,仍然是解决问题的问题。
迄今为止的行为
- 时钟完全初始化后,测试将无法完成。
- 时钟初始化并且注释掉的 clock.restore() 未注释,如果时钟根本没有被打勾,它就可以工作。
- 初始化时钟并注释掉 clock.restore() 后,它挂起,但控制台中记录了“完成”。
这是一些示例代码:
var app = require('../../js/server');
var sinon = require('sinon');
var request = require('supertest');
var clock;
request = request(url + version);
describe("Active Workout REST", function(){
beforeEach(function(){
clock = sinon.useFakeTimers(new Date().getTime());
app.start();
// runs(function(){
var workoutSetup = {
workout: 'cardio',
intensity: 1
}
//sending workoutSetup
request
.post('/workout/setup')
.set('Accept', 'application/json')
.send(workoutSetup)
.end(function(err, res){
console.log("done");
});
//sending start request
request
.post('/workout')
.send({ workout: 'start'})
.set('Accept', 'text/plain')
.end(function(err, res){
console.log("done");
});
//get out of the warmup period
console.log(new Date().getTime());
clock.tick(2 * defs.MINUTES_TO_SECONDS * defs.SECONDS_TO_MS);
// });
console.log(new Date().getTime());
});
afterEach(function(){
console.log("am i here?");
clock.restore();
app.stop();
});
it("should return current parameters", function(done){
runs(function(){
request
.get('/workout/parameters/current')
.set('Accept', 'application/json')
.expect({
incline: 0,
duration_sec: 60
})
.end(function(err, res){
expect(err).toBe(null);
console.log('donee');
// clock.restore();
done();
});
});
});
});