Express 使用Jasmine测试多个http请求以表示应用程序

Express 使用Jasmine测试多个http请求以表示应用程序,express,jasmine,Express,Jasmine,我使用npm安装-g Jasmine 我正在尝试使用下面的测试套件一次测试多个http请求,每个请求都会发送多个调用(请参阅console.log()的输出,但没有返回任何结果,因此测试失败,请指导我是否可以这样做?如何做 index.js spec/multipleRequestSpec.js 编辑 当只测试一个请求时,我将done()放在request()中,它工作得很好,但在使用async.pararell() spec/requestSpec.js 在descripe块中,您启动变量bo

我使用
npm安装-g Jasmine

我正在尝试使用下面的测试套件一次测试多个http请求,每个请求都会发送多个调用(请参阅
console.log()
的输出,但没有返回任何结果,因此测试失败,请指导我是否可以这样做?如何做

index.js

spec/multipleRequestSpec.js

编辑 当只测试一个请求时,我将
done()
放在
request()
中,它工作得很好,但在使用
async.pararell()

spec/requestSpec.js


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

将每次之前的更改为:

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端点测试,它更易于使用,或者可以代替
请求

谢谢@Krzysztof如果我尝试了它,但仍然不起作用,我认为问题在于如何放置
done()
callback我已经编辑了我的答案,请再次检查(我以前写的内容也正确,但现在我又解决了一个问题)您的回答实际上解决了我的问题,谢谢,但我怀疑为什么如果我有多个
it()
块,请求将按
it()
块的数量发送
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);
    });
});
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);
    });
});
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);
});