首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用async.waterfall实现Sinon.JS的顽固

用async.waterfall实现Sinon.JS的顽固
EN

Stack Overflow用户
提问于 2016-04-22 15:41:56
回答 1查看 562关注 0票数 1

我试图通过使用async.waterfall的一个函数来测试Sinon.js

代码语言:javascript
复制
// functions.js
module.exports = {
  // function I don't want to run
  doBigThing: function() {
    console.log("[doBigThing] was called");
  },

  // function I want to stub
  myFunction: function(number, callback) {
    console.log("[myFunction] was called");
    doBigThing();
    callback(null, number);
  },

  // function I want to test
  waterfall: function(callback) {
    return async.waterfall([
      async.constant(5), // 5 just for the demo
      myFunction
    ], callback);
  }
}

我的测试是:

代码语言:javascript
复制
describe('water', function() {
  it ('successfully falls', function() {
    // function under test
    var waterfall = functions.waterfall;

    var callback = function(err, number) {
      expect(err).to.be.null;
      expect(number).to.equal(5);
    };

    // I would like this stub to run instead of functions.myFunction
    sinon.stub(functions, 'myFunction', function(number, callback) {
      console.log("[myFunction] stub was called");
      callback(null, number);
    });

    waterfall(callback);
    // I suppose this is happening: myFunction(5, callback) 
    expect(functions.myFunction.withArgs(5, callback)).to.have.been.called;
    expect(callback).to.have.been.called;
  });
});

所以测试通过了,但是存根被忽略了,因为调用了doBigThing

代码语言:javascript
复制
  Water
    ✓ successfully falls
[myFunction] was called
[doBigThing] was called

相反,我想看到

代码语言:javascript
复制
  Water
    ✓ successfully falls
[myFunction] stub was called

我可能错过了一些事情,我会感谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-25 11:28:30

您正在固执functions对象的方法 myFunction,但是在waterfall方法中,您正在调用myFunction 函数(实际上我无法在我的环境中运行您的代码,我得到了"ReferenceError: myFunction未定义“)。所以这应该是可行的:

代码语言:javascript
复制
// functions.js
var functions = {
  // function I don't want to run
  doBigThing: function() {
    console.log("[doBigThing] was called");
  },

  // function I want to stub
  myFunction: function(number, callback) {
    console.log("[myFunction] was called");
    functions.doBigThing(); // CHANGE HERE
    callback(null, number);
  },

  // function I want to test
  waterfall: function(callback) {
    return async.waterfall([
      async.constant(5), // 5 just for the demo
      functions.myFunction // CHANGE HERE
    ], callback);
  }
};

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

https://stackoverflow.com/questions/36798110

复制
相关文章

相似问题

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