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