1

我正在编写一个需要与另一台服务器通信的 node.js Web 服务。所以它基本上是服务器到服务器的通信。我以前没有任何编写 Web 服务的经验,所以我的知识非常有限。对于单元测试,我使用的是 Mocha。

现在,我打算在此其他服务器未响应我的 GET 请求并且请求实际上已超时时,针对特定场景测试我的服务的行为。对于测试,我围绕我的 Web 服务创建了一个假客户端和服务器。我的 Web 服务现在接受来自这个假客户端的请求,然后从我创建的另一个假服务器获取信息,然后以预期格式返回响应。为了模拟超时,我没有从我的路由处理程序中执行 response.end()。问题是 Mocha 判断它没有通过这个测试用例。

有没有办法可以在 Mocha 中捕捉到这种故意超时并且测试成功?

4

1 回答 1

0

正如mido22 建议的那样,您应该使用处理您用于连接的任何库生成的超时。例如,使用request

var request = require("request");

it("test", function (done) {
    request("http://www.google.com:81", {
        timeout: 1000
    }, function (error, response, body) {
        if (error && error.code === 'ETIMEDOUT') {
            done(); // Got a timetout: that's what we wanted.
            return;
        }

        // Got another error or no error at all: that's bad!
        done(error || new Error("did not get a timeout"));
    });
});
于 2015-03-20T10:40:52.987 回答