Czy istnieje sposób, aby łatwo zresetować wszystkie kpiny i kikuty szpiegów Sinon, które będą działać czysto z mokką przed każdym blokiem.
Widzę, że piaskownica jest opcją, ale nie widzę, jak można do tego użyć piaskownicy
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
Poprzednie odpowiedzi sugerują użycie
sandboxes
do tego celu, ale zgodnie z dokumentacją :Oznacza to, że oczyszczenie twoich stubów / udawanych szpiegów jest teraz tak proste, jak:
źródło
Aktualizacja odpowiedzi @keithjgrant.
Z wersji v2.0.0 kolejnych, sinon.test metoda została przeniesiona do oddzielnego
sinon-test
modułu . Aby stare testy przeszły pomyślnie, musisz skonfigurować tę dodatkową zależność w każdym teście:Alternatywnie możesz obejść się bez piaskownic
sinon-test
i używać ich :źródło
Możesz użyć sinon.collection, jak pokazano w tej poście na blogu (z maja 2010) autorstwa autora biblioteki sinon.
Interfejs API sinon.collection uległ zmianie i sposób jego użycia jest następujący:
źródło
restore()
po prostu przywraca zachowanie funkcji skrótów, ale nie resetuje stanu kodów pośredniczących. Będziesz musiał albo opakować swoje testysinon.test
i użyć,this.stub
albo indywidualnie wywołaćreset()
kody pośrednicząceźródło
Jeśli chcesz, aby konfiguracja, która będzie miała sinon, zawsze resetuje się dla wszystkich testów:
w helper.js:
Następnie w swoim teście:
źródło
Zauważ, że używając qunit zamiast mokki, musisz owinąć je w moduł, np
źródło
beforeEach
iafterEach
.setup
Iteardown
metody będą przestarzałe.Stwórz piaskownicę, która będzie działać jako pojemnik z czarną skrzynką dla wszystkich twoich szpiegów, stubów, fałszywek i podróbek.
Wszystko, co musisz zrobić, to utworzyć piaskownicę w pierwszym bloku opisu, aby była dostępna we wszystkich przypadkach testowych. A kiedy skończysz ze wszystkimi przypadkami testowymi, powinieneś zwolnić oryginalne metody i wyczyścić
sandbox.restore()
kody pośredniczące za pomocą metody w podpięciu afterEach, aby w czasie wykonywania zwolnić zatrzymane zasobyafterEach
Przypadek testowy przeszedł pomyślnie lub zakończył się niepowodzeniem.Oto przykład:
źródło