Есть ли способ легко сбросить все макеты и заглушки, которые будут работать чисто с блоками mocha beforeEach.
Я вижу, что песочница - это вариант, но я не вижу, как вы можете использовать песочницу для этого
beforeEach ->
sinon.stub some, 'method'
sinon.stub some, 'mother'
afterEach ->
# I want to avoid these lines
some.method.restore()
some.other.restore()
it 'should call a some method and not other', ->
some.method()
assert.called some.method
Предыдущие ответы предлагают использовать
sandboxes
для этого, но согласно документации :Это означает, что очистка ваших пней / издевательств / шпионов теперь так же просто, как:
источник
Обновление @keithjgrant ответа.
Начиная с версии 2.0.0 , метод sinon.test был перенесен в отдельный
sinon-test
модуль . Чтобы пройти старые тесты, вам нужно настроить эту дополнительную зависимость в каждом тесте:В качестве альтернативы вы можете обойтись без песочниц
sinon-test
и использовать их :источник
Вы можете использовать sinon.collection, как показано в этом сообщении в блоге (от мая 2010 года) автора библиотеки sinon.
API sinon.collection изменился, и его можно использовать следующим образом:
источник
restore()
просто восстанавливает поведение заглушки, но не сбрасывает состояние заглушек. Вам придется либо обернуть свои тестыsinon.test
и использовать,this.stub
либо по отдельности вызватьreset()
заглушкиисточник
Если вы хотите, чтобы настройка, в которой будет работать sinon, всегда сбрасывалась для всех тестов:
в helper.js:
Затем в вашем тесте:
источник
Обратите внимание, что при использовании qunit вместо mocha вам нужно обернуть их в модуль, например
источник
beforeEach
иafterEach
.setup
Иteardown
методы будут устаревшими.Создайте песочницу, которая будет действовать как контейнер черного ящика для всех ваших шпионов, пней, издевательств и подделок.
Все, что вам нужно сделать, это создать песочницу в самом первом блоке описаний, чтобы она была доступна во всех тестовых примерах. И как только вы закончите со всеми тестовыми примерами, вы должны освободить исходные методы и очистить заглушки, используя метод
sandbox.restore()
в ловушке afterEach, чтобы во время выполнения он освободил задержанные ресурсы.afterEach
Тестовый пример пройден или не пройден.Вот пример:
источник