【问题标题】:http.request callback not called in mocha and chai unit test在 mocha 和 chai 单元测试中未调用 http.request 回调
【发布时间】:2017-12-16 16:37:36
【问题描述】:

我正在尝试使用以下代码对一个简单的 http REST 客户端使用 Node.js 的 mocha 和 chai 库进行单元测试:

var chai = require('chai');
var asrt = require('chai').assert;
var client = require('../index');

describe('#Do successful', function () {
it('should pass when schema, host and port are provided', function () {
        client.do('http:', 'localhost', '8080', '', function (result) {
        console.log("starting assertions");
        asrt.isAbove(result.items.length,0);
        // ... other assertions
    });
});
});

当我使用 npm test 运行测试时,测试“通过”但从未打印记录“开始断言”的行,因为从未调用 client.do 函数回调,但我看到服务器正确接收请求并响应。

我显然遗漏了一些东西,但我不明白具体是什么。请注意:

1) 在非测试文件中使用的一段非常相似的代码会产生预期的结果(即:调用回调,如果填充了响应数据,则返回结果数据)。

2) 同样,我正在测试客户端,而不是服务器,所以我想我不应该使用 done() 函数(但我也尝试过,但没有成功)。

您对如何解决此问题有任何提示吗?谢谢

【问题讨论】:

  • 你能显示client.do()的来源吗?

标签: node.js unit-testing mocha.js chai


【解决方案1】:

假设client.do 是异步的,因为您所描述的内容与执行测试、触发异步请求和不等待响应是内联的。

在这种情况下,解决方案是使用带有done 参数的异步测试:

var chai = require('chai');
var asrt = require('chai').assert;
var client = require('../index');

describe('#Do successful', function () {
  it('should pass when schema, host and port are provided', function (done) {
    client.do('http:', 'localhost', '8080', '', function (result) {
      console.log("starting assertions");
      asrt.isAbove(result.items.length,0);
      // ... other assertions
      // TEST WAITS FOR TIMEOUT OR UNTIL done() IS CALLED
      done();
    });
  });
});

【讨论】:

  • 使用 done 确保了测试的正确行为。为了进一步检查它是否有效,我还添加了一些失败案例,它按预期失败了。所以,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-22
  • 1970-01-01
  • 2023-04-11
  • 2015-03-06
  • 2015-11-18
相关资源
最近更新 更多