¿Hay alguna manera de restablecer fácilmente todos los simulacros y trozos de sinon spys que funcionarán limpiamente con los mocas antes de cada bloque?
Veo que el sandboxing es una opción, pero no veo cómo puedes usar un sandbox para esto
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
Las respuestas anteriores sugieren usar
sandboxes
para lograr esto, pero de acuerdo con la documentación :Eso significa que limpiar sus trozos / simulacros / espías ahora es tan fácil como:
fuente
Una actualización de la respuesta @keithjgrant.
Desde la versión v2.0.0 en adelante, el método sinon.test se ha movido a un
sinon-test
módulo separado . Para pasar las pruebas anteriores, debe configurar esta dependencia adicional en cada prueba:Alternativamente, puedes prescindir
sinon-test
y usar sandboxes :fuente
Puede usar sinon.collection como se ilustra en esta publicación de blog (fechada en mayo de 2010) por el autor de la biblioteca de sinon.
La API de sinon.collection ha cambiado y una forma de usarla es la siguiente:
fuente
restore()
solo restaura el comportamiento de la funcionalidad de stubbed pero no restablece el estado de los stubs. Tendrá que completar sus pruebassinon.test
y usarlasthis.stub
o llamar individualmentereset()
a los talonesfuente
Si desea una configuración que tendrá sinon, siempre se reiniciará para todas las pruebas:
en helper.js:
Luego, en tu prueba:
fuente
Tenga en cuenta que cuando use qunit en lugar de mocha, debe envolverlos en un módulo, por ejemplo
fuente
beforeEach
yafterEach
. Los métodossetup
yteardown
quedarán en desuso.Cree una caja de arena que actuará como un contenedor de caja negra para todos sus espías, trozos, simulacros y falsificaciones.
Todo lo que tiene que hacer es crear un sandbox en el primer bloque de descripción para que sea accesible en todos los casos de prueba. Y una vez que haya terminado con todos los casos de prueba, debe liberar los métodos originales y limpiar los apéndices utilizando el método
sandbox.restore()
en el gancho afterEach para que en tiempo de ejecución libere elafterEach
caso de prueba de recursos retenidos que se pasa o falla.Aquí hay un ejemplo:
fuente