Javascript 使用mocha构建异步代码测试(请求)
我正在尝试在Node.JS上使用Mocha和Chai创建单元测试。下面是要测试的函数的简化版本:Javascript 使用mocha构建异步代码测试(请求),javascript,node.js,mocha.js,chai,Javascript,Node.js,Mocha.js,Chai,我正在尝试在Node.JS上使用Mocha和Chai创建单元测试。下面是要测试的函数的简化版本: router.cheerioParse = function(url, debugMode, db, theme, outCollection, _callback2) { var nberror = 0; var localCount = 0; console.log("\nstarting parsing now : " + theme); request(ur
router.cheerioParse = function(url, debugMode, db, theme, outCollection, _callback2) {
var nberror = 0;
var localCount = 0;
console.log("\nstarting parsing now : " + theme);
request(url, function(error, response, body) {
//a lot of postprocessing here that returns
//true when everything goes well)
});
}
以下是我试图编写的测试:
describe('test', function(){
it('should find documents', function(){
assert( true ==webscraping.cheerioParse("http://mytest.com, null, null, null ,null,null ));
});
})
请求
函数如何返回true以通过测试?我试着用承诺,但也没用。在这种情况下,我应该将return语句放在然后回调中吗?最好的方法是什么?您应该模拟请求
函数。例如,您可以使用sinon
存根(它们提供定义返回值的returns
函数)
一般来说,单元测试的思想是分离特定的功能(测试单元)和存根(stub)每个其他依赖项,就像您应该处理请求:)
为此,您必须覆盖原始的请求
对象,例如:
before(function() {
var stub = sinon.stub(someObjectThatHasRequestMethod, 'request').returns(true);
});
在运行测试之后,您应该取消发布此对象,以便将来进行类似的测试:
after(function() {
stub.restore();
});
仅此而已:)您可以在每次之后/之后使用,也可以在每次之前/之前使用——选择一个更适合您的
还有一点需要注意——因为您的代码是异步的,所以您的解决方案可能需要更复杂的测试方法。您可以提供完整的request
mock函数,并在返回如下值时调用done()
callback:
it('should find documents', function(done) {
var requestStub = sinon.stub(someObjectThatHasRequestMethod, 'request',
function(url, function (error, response, body) {
done();
return true;
}
assert(true === webscraping.cheerioParse("http://mytest.com, null, null, null ,null,null ));
requestStub.restore();
});
您可以在此处找到更多信息:
摩卡咖啡支持和