Используйте sinon.js для создания «шпионского объекта» с помощью шпионских методов на основе реального конструктора/прототипа

Я использую sinon.js как способ заглушить зависимости в своих тестах Mocha. Я предпочитаю «шпионский» подход классическому фиктивному подходу, поскольку самоанализ шпиона кажется более ясным и предоставляет больше гибкости, чем несколько отсталое -мышление с классическими фиктивными объектами.

Тем не менее, мне интересно, неправильно ли я использую его, когда дело доходит до создания тестовых шпионов для целых объектов. Допустим, у меня есть тестовая зависимость, в которой есть 4 метода, и я хочу заглушить каждый из этих методов и сделать утверждения для одного или двух из них. В настоящее время я делаю это:

var spyObj = {
  aMethod: sinon.spy(),
  otherMethod: sinon.spy(),
  whatever: sinon.spy()
};

Затем я просто задаю такие вопросы, как spyObj.aMethod.calledWith(a, b, c).

Есть ли лучший способ смоделировать весь класс, чем повторять имена методов в самом наборе тестов? Похоже, что sinon.stub ()пытается выполнить итерацию по всем элементам данного объекта, но это, похоже, не работает как способ получить все методы для большинства объектов в более современных средах выполнения JS, таких как V8, если только объект на самом деле является чем-то перечислимым. Он также пытается исправить фактический объект, а не возвращать эквивалентный, что несколько нежелательно. Мне просто нужен объект, который соответствует интерфейсу, но ведет себя как нулевой объект, если я не скажу иначе.

Было бы неплохо иметь возможность сделать что-то вроде:

var spyObject = sinon.spy(MyClass.prototype);

Как найти все методы конструктора/прототипа в Node.js, чтобы сделать оболочку, подобную приведенной выше?

Это больше связано с заглушением логики, чем с тестированием вызовов множества методов (, которые я стараюсь ограничить одним или сразу двумя ). Например, вещи, которые могут привести к нежелательному вводу-выводу или потребовать дополнительных сложных приспособлений, если они выполняются.

10
задан d11wtq 19 August 2012 в 07:44
поделиться