2016-12-14 5 views
3

Хотя есть сообщения об этом, я не мог исправить его, используя до, после функций и восстановления объектов. Проводка код ниже: -Sinon stub throwing Попытка обернуть объект, который уже завернут

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 функций, но ту же ошибку.

+0

Действительно ли это [mcve]? Где еще вы называете 'sinon.stub'? – cartant

+0

Вам необходимо предоставить полный пример. Также помните, что если в предыдущем тесте у вас есть заглушка или шпион, вам нужно сделать ** restore **, чтобы избежать конфликтов с тестами подпоследовательности. – Hosar

+0

Привет, @ Хосар, извините, я в этом нет. Где именно мне нужно сделать восстановление. – david419

ответ

2

sinon documentation С:

вар тупиковой = sinon.stub (объект, "метод"); Заменяет объект.method на функцию заглушки . Исходную функцию можно восстановить, вызвав object.method.restore(); (или stub.restore();). Исключение составляет , если свойство еще не является функцией, чтобы избежать опечаток при методах stubbing .

Завершение обычно восстанавливается после завершения теста с использованием крючков 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

Разве вы не заглушаете в before/beforeEach и не восстанавливаете в after/afterEach? Так я всегда это делал. – cartant

+0

@cartant Мой плохой, вы правы, конечно. Сегодня недостаточно кофе. – Gordon