以下测试不适用于mocha-chai,它能够获取输入请求但会抛出错误消息。
it('/hb : ', function (done) {
return chai.request(app)
.post('/hb')
.send({"a":1 })
.then(function (res) {
expect(err).to.be.null;
expect(res).to.have.status(200);
// { ah: { rt: [Object] }, ad: { mojo: 1 } } }
//console.log("CAlling DOne ........... +");
done();
}, function (err) {
//console.log(err);
throw err;
});
});
输出:
Web请求:/ hb :: 错误:超过2000毫秒的超时。确保在此测试中调用done()回调。
答案 0 :(得分:1)
chai-http
添加到chai
的函数会返回承诺。在您的代码中,您将返回承诺,这很好。但是,您还要声明测试以获取参数:function (done)
。如果您没有返回承诺,这将没有问题,但返回承诺确实是更好的机制。当您声明测试采用参数时,Mocha会忽略测试的返回值,因此会忽略promise。因此,请删除您对done
的使用。
这是一个示例,它会重现原始代码中的错误,并且在您传递给err
的函数中未定义then
。
'use strict';
var app = require('./server');
var chai = require('chai');
chai.use(require('chai-http'));
var expect = chai.expect;
it('/hb', function () {
return chai.request(app)
.post('/hb')
.send({a: 1})
.then(function (res) {
expect(err).to.be.null;
expect(res).to.have.status(200);
});
});
如果服务器返回200状态,那么您将在控制台上获取此信息:
1) /hb
0 passing (26ms)
1 failing
1) /hb:
ReferenceError: err is not defined
at test.js:13:20
如果服务器返回400状态,则输出为:
1) /hb
0 passing (24ms)
1 failing
1) /hb:
Error: Bad Request
at Test.Request.callback (node_modules/superagent/lib/node/index.js:792:17)
at IncomingMessage.<anonymous> (node_modules/superagent/lib/node/index.js:990:12)
at endReadableNT (_stream_readable.js:913:12)
答案 1 :(得分:0)
您需要添加以下内容:
.set('content-type', 'application/x-www-form-urlencoded')
引用此问题