使用Jasmine

时间:2015-11-08 06:07:18

标签: express jasmine

我使用npm install -g jasmine

全局安装了Jasmine CLI

我正在尝试使用下面的测试套件一次测试多个http请求,每个请求发送多个调用(看到console.log()的输出但没有返回所以测试失败,请指导我这是否可能这样做?以及如何做到这一点?

index.js

var app = require('express')();
var request = require('request');

app.get('/', function(req, res) {
    console.log('GET /');
    res.status(200);
    res.send('Hello World');
});

app.listen(3000);

规格/ multipleRequestSpec.js

var request = require('request');
var async = require('async');

describe('express application', function() {
    var baseUrl = 'http://localhost:3000';
    var statusCode = [0, 0];
    var b = ['', ''];

    beforeEach(function(done) {
        async.parallel([
            function() {
                request.get(baseUrl, function(err, res, body) {
                    statusCode[0] = res.statusCode;
                    b[0] = body;
                })
            }
            ,
            function() {
                request.post(baseUrl, function(err, res, body) {
                    statusCode[1] = res.statusCode;
                    b[1] = body;
                })
            }
        ], done());
    });

    it('should return 200', function() {
        expect(statusCode[0]).toBe(200);
    });

    it('should return hello world', function() {
        expect(b[0]).toEqual('Hello World');
    });

    it('should return error 404', function() {
        expect(statusCode[1]).toBe(404);
    });
});

被修改

当只测试一个请求时,我将done()放在request()里面就可以了,但是在使用done()

时我很混淆async.pararell()的位置

规格/ requestSpec.js

var request = require('request');

describe('expresss application', function() {
    var baseUrl = 'http://localhost:3000';
    var statusCode = 0;

    beforeEach(function(done) {
        request.get(baseUrl, function(err, res, body) {
            statusCode = res.statusCode;
            done();
        });

    });

    it('should return 200', function() {
        expect(statusCode).toBe(200);
    });
});

1 个答案:

答案 0 :(得分:1)

describe阻止中,您启动变量body。你在it块中使用它。但是在request.get和request.post中,你有一个带有参数body的回调函数,而不是你的describe body变量。

beforeEach 更改为:

beforeEach(function(done) {
    async.parallel([
        function(callback) {
            request.get(baseUrl, function(err, res, reqBody) {
                statusCode[0] = res.statusCode;
                body[0] = reqBody;
                callback();
            })
        }
        ,
        function(callback) {
            request.post(baseUrl, function(err, res, reqBody) {
                statusCode[1] = res.statusCode;
                body[1] = reqBody;
                callback();
            })
        }
    ], done);
});

我认为您还应该在请求回调中检查err param。因为可能存在失败/通过测试的错误。

对于api端点测试,使用superagentsupertest代替request更容易。