【问题标题】:Sinon stub throwing Attempted to wrap object which is already wrappedSinon stub throwing 试图包裹已经包裹的对象
【发布时间】:2016-12-14 06:17:07
【问题描述】:

虽然有关于此的帖子,但我无法使用 before、after 函数和恢复对象来修复它。贴出以下代码:-

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 函数,但同样的错误。

【问题讨论】:

  • 这真的是minimal reproducible example吗?你还在哪里打电话给sinon.stub
  • 您需要提供完整的示例。还要记住,如果在之前的测试中你有一个存根或间谍,你需要做一个restore,以避免与后续测试发生冲突。
  • 嗨@Hosar,对不起,我是个菜鸟。我到底需要在哪里进行恢复。

标签: node.js express sinon


【解决方案1】:

来自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();
  });

【讨论】:

  • 你不会在 before/beforeEach 中存根并在 after/afterEach 中恢复吗?这就是我一直这样做的方式。
  • @cartant 我的错,你当然是对的。今天咖啡不够。
【解决方案2】:

你是在存根 someVar.some 而不是 someVar 本身 所以你需要恢复它的方法:

    someVar.some.restore();

如果还是有问题,那么尝试使用下面的方法来存根。

    someVar.some = sinon.stub();

看起来一样,但事实并非如此 :)(经过数小时的咒骂后发现)

无论如何,让我们尝试使用 sinon 中的沙箱来存根,然后在最后恢复沙箱

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

【讨论】:

    猜你喜欢
    • 2021-08-24
    • 2014-07-30
    • 1970-01-01
    • 2018-03-24
    • 2012-02-08
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多