我需要以下代码的帮助。我正在测试向特定端点发送请求的服务,我需要捕获请求的主体(为此使用节点表示)。跑步者是摩卡测试,有1个以上的阻止。 当我调试测试时,第一个it块按预期工作(声明通过),但是当控件到达第二个it块时,一旦请求被发布,则控件又回到第一个块,并且第二个块中的断言永远不会到达。我在这里做什么错了?
{
var express = require("express");
var bodyPaser = require('body-parser');
var expressObj = new express();
expressObj.use(bodyPaser.json());
describe('describe', function () {
before('describe', function () {
expressObj.listen(8080);
});
it('first It', function (done) {
expressObj.post('/mytest/first', function (req, res) {
res.send("Hello");
// assert.equal(JSON.stringify(req.body), JSON.stringify('first":test'));
done();
});
});
it('second it', function (done) {
expressObj.post('/mytest/first', function (req, res) {
res.send("Hello");
// assert.equal(JSON.stringify(req.body), JSON.stringify('first":test'));
done();
});
});
});
答案 0 :(得分:0)
第一次和第二次测试仅是设置路由,但实际上并没有向所描述的任何一条路由发送请求。因此测试开始了,但是第一个实际上并没有执行任何操作,因此从未调用完成,这就是为什么第二个测试根本没有开始运行的原因。要测试这些路由,您需要在定义它们之后为每个路由创建一个请求。这是您的代码的有效演示:
var express = require("express");
var bodyPaser = require('body-parser');
var expressObj = new express();
expressObj.use(bodyPaser.json());
const request = require('request');
describe('describe', function () {
before('describe', function (done) {
expressObj.listen(8080, function(err) {
if(err) {
console.error(err);
done(err);
return;
}
console.log('listening on localhost:8080');
done();
});
});
it('first It', function (done) {
expressObj.post('/mytest/first', function (req, res) {
res.send("Hello");
// assert.equal(JSON.stringify(req.body), JSON.stringify('first":test'));
done();
});
request.post('http://localhost:8080/mytest/first');
});
it('second it', function (done) {
expressObj.post('/mytest/second', function (req, res) {
res.send("Hello");
// assert.equal(JSON.stringify(req.body), JSON.stringify('first":test'));
done();
});
request.post('http://localhost:8080/mytest/second');
});
});