Sinon stub throw尝试包装已经包裹的对象

时间:2016-12-14 06:17:07

标签: node.js express sinon

虽然有关于此的帖子,我无法在使用函数和恢复对象之前使用它。发布以下代码: -

var Log = sinon.stub(hello, 'someEvent', function(type, name){
        var obj = {};
        obj.addData = function(data){
            return;
        };
        obj.complete = function(){
            return;
        }
        return obj;
     }),
    someVar = sinon.stub(servicecore, 'some'),

我得到的错误是: -

Attempted to wrap someEvent which is already wrapped.

Attempted to wrap some which is already wrapped.

有人可以帮忙吗?

  

编辑如下

我甚至尝试过按照建议使用前后功能: -

var Log,someVar;

before(function(){

   Log = sinon.stub(hello, 'someEvent', function(type, name){
            var obj = {};
            obj.addData = function(data){
                return;
            };
            obj.complete = function(){
                return;
            }
            return obj;
         });
    someVar = sinon.stub(servicecore, 'some');

});

after(function(){

    Log.restore();
    someVar.restore();
});

尝试使用beforeEach和afterEach函数但同样的错误。

2 个答案:

答案 0 :(得分:3)

来自sinon documentation

  

var stub = sinon.stub(object," method");用一个替换object.method   存根功能。可以通过调用恢复原始功能   object.method.restore(); (或stub.restore();)。抛出异常   如果属性不是一个功能,以帮助避免拼写错误   存根方法。

使用after或afterEach挂钩完成测试后,通常会恢复存根。

  after(function() {
    // runs before all tests in this block
    someVar.restore();
  });

  afterEach(function() {
    // runs before each test in this block
    someVar.restore();
  });

答案 1 :(得分:0)

您正在存根someVar.some而不是someVar本身 所以您需要恢复其方法:

    someVar.some.restore();

如果仍有问题,请尝试使用以下方法进行存根。

    someVar.some = sinon.stub();

看起来像一样,但不是:)(在宣誓工作数小时后发现)

无论如何,让我们尝试用sinon中的沙箱将其存根,然后只恢复最后的沙箱

https://sinonjs.org/releases/v1.17.7/sandbox/