我正在尝试使用此代码使用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()函数(但我也试过,但没有用)。
你有任何关于如何解决这个问题的提示吗?感谢
答案 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();
});
});
});