在mocha和chai单元测试

时间:2017-07-12 09:59:42

标签: node.js unit-testing mocha chai

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

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测试运行测试时,测试“通过”但是从不打印记录“启动断言”的行,因为从不调用client.do函数回调,但是我看到服务器正确接收了请求并回复。

我显然缺少一些东西,但我无法理解特别是什么。请注意:

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

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

你有任何关于如何解决这个问题的提示吗?感谢

1 个答案:

答案 0 :(得分:0)

假设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();
    });
  });
});