2

我一直在编写健身 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();
                });
        });
    });
});
4

0 回答 0