当前位置: 首页 > 知识库问答 >
问题:

Mocha Chai HTTP post请求不工作

越高峻
2023-03-14

下面的测试不使用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::Error:超时2000ms。确保在此测试中调用了done()回调。

共有2个答案

微生俊健
2023-03-14

您需要添加以下内容:

.set('content-type', 'application/x-www-form-urlencoded')

您可以通过Chai在Post请求上引用此问题

商昂然
2023-03-14

添加到 中的函数返回承诺。在您的代码中,您返回了promise,这很好。但是,您还声明您的测试采用a参数: 。如果您没有返回承诺,这会很好,但是返回承诺确实是这里更好的机制。当您声明测试接受参数时,Mocha会忽略测试的返回值,因此promise也会被忽略。所以只需删除对 的使用。

下面的一个示例再现了您在原始代码中的错误,在传递给 的函数中 未定义。

'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)
 类似资料:
  • 我正在这样做: 但是请求在服务器上不起作用。。。在服务器上,我应该看到发送的数据,但我看不到它们 我也试过这个: 而且它是有效的。。。有什么问题吗?

  • 在简单的我的表单,我想使用ajax与和获取和发布请求后,使用和提交表单我的页面是刷新和警报不工作的控制器验证。 控制器中的简单请求ajax无法正常工作 我的形式: 我的控制器: 我的路线:

  • 但当我运行它时,它会给我这个错误: E/AndroidRuntime:致命异常:主进程:com.example.webTestConnection,PID:23550 Android.os.networkonMaintHreadexception,Android.os.strictmode$AndroidBlockGuardPolicy.onNetwork(strictmode.java:1166

  • 我有一个和一个。点击按钮,我想打开键盘,同时请求关注,以便用户直接开始在键盘上键入文本,并出现在中。但是在我的例子中,当我点击按钮时,它会打开键盘,但它不会将焦点设置在上,因为用户必须再次单击才能在上面写入。问题是什么。任何帮助或建议。 单击按钮时的代码

  • 我正在用GoogleVolley Api创建一个android应用程序,它处理我的应用程序和php脚本之间的连接。出于某种原因,该应用程序没有向我的服务器发送任何数据,也许这里的某个人可以找到它? 我的方法被正确调用,但是当我尝试打印它时,它返回null!一切实际上都在工作,除了数据没有正确传递,我相信,因为我的php脚本抱怨变量为空

  • 我正在使用Android截击来发出请求。所以我使用这个代码。我不明白一件事。我在服务器中检查params是否始终为null。我认为GETPARAMS()不工作。我应该做些什么来解决这个问题。