我使用npm install -g jasmine
我正在尝试使用下面的测试套件一次测试多个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);
});
});
答案 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端点测试,使用superagent或supertest代替request
更容易。