2014-09-25 3 views
1

Я хочу, чтобы дразнить некоторый объект некоторого класса, но поймать этот ERR:Mocking класса в Sinon.js и InstanceOf

function MyClass(){} 

var myInstance = new MyClass(); 
var mock = sinon.mock(myInstance); 

console.log(mock instanceof MyClass); // false 

Как я могу передать этот макет в блок под испытанием, если устройство проверяет точно тот же экземпляр в конструкторе?

Я знаю, что этот заглушка решает эту проблему, но мне нужен именно макет.

Спасибо =)

ответ

0

Если я не ошибаюсь, Sinon издевается завернуть связанных с ними объектов, а не непосредственно принимая их цепь прототипов, что означает instanceof никогда не будет работать, как вы хотите.

Если у вас есть возможность изменить тестируемый блок, попробуйте проверить наличие важных свойств на входящем объекте, а не цепочку прототипов. Например, если ваше устройство использует метод MyClassfoo, тогда проверьте устройство typeof o.foo === 'function' вместо o instanceof MyClass.

+0

Конечно, это решение - проверить экземпляр в стиле ducktype, но это немного хакерская или родная языковая функция как 'instanseof'. – gobwas

0

Вопрос неправ.

Вместо передачи mock к единице при испытании, мне нужно еще пройти myInstance объект, а затем проверить mock:

new SUT(myInstance); 
mock.verify(); 
Смежные вопросы