首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用异步代码的mocha构建测试(请求)

使用异步代码的mocha构建测试(请求)
EN

Stack Overflow用户
提问于 2016-01-05 00:48:11
回答 1查看 258关注 0票数 0

我正在尝试用Mocha和Chai在Node.JS上创建单元测试。下面是要测试的函数的简化版本:

代码语言:javascript
运行
AI代码解释
复制
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)
    });
}

以下是我正在尝试编写的测试:

代码语言:javascript
运行
AI代码解释
复制
describe('test', function(){
    it('should find documents', function(){
        assert(  true ==webscraping.cheerioParse("http://mytest.com,   null, null, null ,null,null ));
    });
})

request函数如何返回true以将其传递给测试?我尝试过使用promises,但它也不起作用。在这种情况下,我是否应该将返回语句放在then回调中?最好的方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2016-01-05 00:54:01

你应该模拟request函数。你可以使用例如sinon存根(它们提供了用于定义返回值的returns函数)。

一般来说,单元测试的思想是将特定的函数(测试单元)和存根( stub )分开,就像您应该对request所做的那样:)

为此,您必须覆盖原始request对象,例如:

代码语言:javascript
运行
AI代码解释
复制
before(function() {
  var stub = sinon.stub(someObjectThatHasRequestMethod, 'request').returns(true);
});

在运行测试之后,您应该取消这个对象的存根,以便将来进行类似的测试:

代码语言:javascript
运行
AI代码解释
复制
after(function() {
  stub.restore();
});

这就是全部:)你可以同时使用afterEach/afterbeforeEach/before -选择一个更适合你的。

另请注意--因为您的代码是异步的,所以您的解决方案可能需要更复杂的测试方法。您可以提供完整的request模拟函数,并在返回值时调用done()回调,如下所示:

代码语言:javascript
运行
AI代码解释
复制
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();
});

你可以在这里找到更多信息:

Mocha - asynchronous code testing

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34602541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档