Mocha Chai HTTP发布请求无效

时间:2016-02-23 05:29:06

标签: mocha chai

以下测试不适用于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()回调。

2 个答案:

答案 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')

您可以通过Post request via Chai

引用此问题
相关问题