【问题标题】:Mocha Requires me to read HTTP Request BodyMocha 要求我阅读 HTTP 请求正文
【发布时间】:2013-09-04 22:56:26
【问题描述】:

我正在尝试使用 Mocha 为我正在开发的 Node.js API 编写测试。我正在编写的当前测试只对查看响应是否返回正确的状态代码感兴趣 - 他们不关心响应正文。

因此,我编写了以下测试:

注意,这不是真正的测试。我已经删掉了项目特定的东西。错误确实仍然出现在下面的代码中。

var http = require('http');
var assert = require("assert");

before(function() {
    var server = http.createServer(function(req, res) {
        res.end();
    }).listen(8080);
});

describe("Convenience Functions", function() {

    it("should return a 200 status code", function(done) {
        http.get("http://localhost:8080", function(res) {

            assert.equal(res.statusCode, 200);

            res.on('end', function() {

                done();
            });
        });
    });
});

但是,运行该测试让我从 Mocha 超时。 Mocha 默认设置为 2000 毫秒超时,但我可以将其更改为任何不必要的高数值,它仍然会超时。

我已经为此奋斗了几个小时,终于找到了一个“解决办法”。如果我将测试更改为:

describe("Convenience Functions", function() {

    it("should return a 200 status code", function(done) {
        http.get("http://localhost:8080", function(res) {

            assert.equal(res.statusCode, 200);

            res.on('data', function() { })

            res.on('end', function() {

                done();
            });
        });
    });
});

测试不再超时。您会注意到这两个测试之间的唯一 区别在于第二个版本处理响应中的data 事件。它不对数据做任何事情,它只是在其上定义了一个监听器。现在我的测试顺利通过了。

这是一个很容易解决的问题,但我很困惑为什么我需要这样做。我打电话给done(),摩卡测试不应该就结束吗?

【问题讨论】:

    标签: javascript node.js api unit-testing mocha.js


    【解决方案1】:
       http.get("http://localhost:8080", function(res) {
          assert.equal(res.statusCode, 200);
          done();
       });
    

    这就是你所需要的。数据/结束事件只有在响应有正文时才有用,但它没有,而且在任何情况下你都不关心,所以只需调用 done() 并忽略响应而不检查它的状态代码。

    摩卡测试不应该在我调用 done() 后立即完成吗?

    是的,他们确实如此。您的第一个 sn-p 中的问题是 end 事件永远不会触发,因此您实际上不会调用 done()

    【讨论】:

    • 非常有趣的是,除非您绑定到数据事件,否则节点不会调用结束事件。我想它有点是有道理的。但不完全是。
    • 是的,我怀疑整个streams1、streams2、streams3 的古怪之处也在那里发挥作用,但我并没有记住所有触发不同行为模式的案例。
    猜你喜欢
    • 1970-01-01
    • 2015-04-24
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多