http.request mocha 和 chai 单元测试中未调用回调
http.request callback not called in mocha and chai unit test
我正在尝试使用 Node.js 的 mocha 和 chai 库对一个简单的 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 test 进行测试时,测试 "passes" 但是记录 "starting assertions" 的行永远不会打印,因为 client.do 函数回调永远不会已调用,但我看到服务器已正确接收到请求并做出响应。
我显然遗漏了一些东西,但我不明白具体是什么。请注意:
1) 非测试文件中使用的一段非常相似的代码产生了预期的结果(即:回调被调用并且结果数据填充了响应数据)。
2) 同样,我正在测试客户端,而不是服务器,所以我想我不应该使用 done() 函数(但我也试过了,但没有成功)。
关于如何解决这个问题,您有什么建议吗?谢谢
假设 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();
});
});
});
我正在尝试使用 Node.js 的 mocha 和 chai 库对一个简单的 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 test 进行测试时,测试 "passes" 但是记录 "starting assertions" 的行永远不会打印,因为 client.do 函数回调永远不会已调用,但我看到服务器已正确接收到请求并做出响应。
我显然遗漏了一些东西,但我不明白具体是什么。请注意:
1) 非测试文件中使用的一段非常相似的代码产生了预期的结果(即:回调被调用并且结果数据填充了响应数据)。
2) 同样,我正在测试客户端,而不是服务器,所以我想我不应该使用 done() 函数(但我也试过了,但没有成功)。
关于如何解决这个问题,您有什么建议吗?谢谢
假设 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();
});
});
});