Gibt es eine Möglichkeit, alle Verspottungen und Stubs von Sinon-Spionen, die mit Mokkas vor jedem Block sauber funktionieren, einfach zurückzusetzen?
Ich sehe, dass Sandboxing eine Option ist, aber ich sehe nicht, wie Sie eine Sandbox dafür verwenden können
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
Frühere Antworten schlagen vor
sandboxes
, dies zu verwenden, aber gemäß der Dokumentation :Das bedeutet, dass das Aufräumen Ihrer Stubs / Mocks / Spione jetzt so einfach ist wie:
quelle
Ein Update auf @keithjgrant Antwort.
Ab Version v2.0.0 wurde die Methode sinon.test in ein separates
sinon-test
Modul verschoben . Damit die alten Tests bestanden werden, müssen Sie diese zusätzliche Abhängigkeit in jedem Test konfigurieren:Alternativ haben Sie ohne
sinon-test
und Nutzung Sandkästen :quelle
Sie können sinon.collection verwenden, wie in diesem Blog-Beitrag (vom Mai 2010) des Autors der sinon-Bibliothek dargestellt.
Die sinon.collection-API hat sich geändert und kann folgendermaßen verwendet werden:
quelle
restore()
stellt nur das Verhalten der Stubbed-Funktionalität wieder her, setzt jedoch den Status der Stubs nicht zurück. Sie müssen Ihre Tests entweder mit den Stubs abschließensinon.test
und sie verwendenthis.stub
oder sie einzeln aufrufenreset()
quelle
Wenn Sie ein Setup wünschen, bei dem sinon immer für alle Tests zurückgesetzt wird:
in helper.js:
Dann in Ihrem Test:
quelle
Beachten Sie, dass Sie bei Verwendung von qunit anstelle von Mokka diese in ein Modul einschließen müssen, z
quelle
beforeEach
undafterEach
. Die Methodensetup
undteardown
werden nicht mehr unterstützt.Erstellen Sie eine Sandbox, die als Blackbox-Container für alle Ihre Spione, Stubs, Mocks und Fakes fungiert.
Alles, was Sie tun müssen, ist, im allerersten Beschreibungsblock eine Sandbox zu erstellen, damit Sie in allen Testfällen darauf zugreifen können. Und wenn Sie mit allen Testfällen fertig sind, sollten Sie die ursprünglichen Methoden freigeben und die Stubs mithilfe der Methode
sandbox.restore()
im afterEach-Hook bereinigen, damit zur Laufzeit freigegebene Ressourcen freigegeben werden. DerafterEach
Testfall ist bestanden oder fehlgeschlagen.Hier ist ein Beispiel:
quelle