用sinon假定时器测试,表达js,jasmine-node和supertest

时间:2014-07-30 17:28:27

标签: node.js express sinon jasmine-node supertest

我一直在编写健身webkit应用程序的服务器端。 HTTP呼叫被发送到服务器以开始基于时间的"锻炼"在申请中。我一直在使用茉莉花节点进行测试,到目前为止它一直在工作。唯一不行的是我试图使用sinon假定时器。

我遇到的问题是测试没有通过下面代码中的it语句。如果我删除clock.tick函数调用它是有效的。为什么不呢 如果时钟已被120000毫秒勾选,请从it语句继续?如果没有在get请求的.end中注释掉clock.restore(),则请求永远不会完成。我无法确定问题的确切位置(jasmine-node vs express vs supertest)。在那之后,它仍然是解决问题的问题。

到目前为止的行为

  • 根据时钟初始化,测试不会结束。
  • 在时钟初始化和注释掉的clock.restore()取消注释的情况下,如果时钟尚未勾选则可以正常工作。
  • 时钟初始化并且clock.restore()已注释掉,它会挂起,但是已经完成了#39;在控制台中记录。

以下是一些示例代码:

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();
                });
        });
    });
});

0 个答案:

没有答案