Existe uma maneira de redefinir facilmente todas as zombarias e stubs de sinon spys que funcionarão corretamente com os blocos beforeEach de mocha.
Vejo que o sandbox é uma opção, mas não vejo como você pode usar um sandbox para esse
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
As respostas anteriores sugerem o uso
sandboxes
para fazer isso, mas de acordo com a documentação :Isso significa que limpar seus stubs / zombarias / espiões agora é tão fácil quanto:
fonte
Uma atualização para a resposta @keithjgrant.
A partir da versão v2.0.0 , o método sinon.test foi movido para um
sinon-test
módulo separado . Para fazer os testes antigos passarem, você precisa configurar essa dependência extra em cada teste:Como alternativa, você fica sem
sinon-test
e usa sandboxes :fonte
Você pode usar sinon.collection conforme ilustrado nesta postagem do blog (datada de maio de 2010) pelo autor da biblioteca sinon.
A API do sinon.collection mudou e uma maneira de usá-la é a seguinte:
fonte
restore()
apenas restaura o comportamento da funcionalidade stubbed, mas não redefine o estado dos stubs. Você precisará encerrar seus testessinon.test
e usarthis.stub
ou chamar individualmentereset()
os stubsfonte
Se você deseja uma configuração que terá o sinon sempre se redefinirá para todos os testes:
em helper.js:
Então, no seu teste:
fonte
Observe que ao usar o qunit em vez do mocha, é necessário envolvê-los em um módulo, por exemplo
fonte
beforeEach
eafterEach
. Os métodossetup
eteardown
serão descontinuados.Crie uma caixa de areia que funcionará como um recipiente de caixa preta para todos os seus espiões, tocos, zombarias e falsificações.
Tudo o que você precisa fazer é criar uma caixa de proteção no primeiro bloco de descrição, para que seja acessível em todos os casos de teste. E quando terminar todos os casos de teste, você deverá liberar os métodos originais e limpar os stubs usando o método
sandbox.restore()
no gancho afterEach, para que, em tempo de execução, libere recursos retidosafterEach
caso de teste é aprovado ou falhou.Aqui está um exemplo:
fonte