2011-09-25 17 views
15

Próbuję napisać testy jednostkowe dla części mojej aplikacji węzła. Używam Mongoose dla mojej ORM.Testowanie aplikacji Mongoose Node.JS

Przeszukałem grupę, aby dowiedzieć się, jak przeprowadzić test z Mongoose i Node, ale nic z tego nie wynika. Rozwiązania/frameworki wydają się być pełne lub nie wspominają o drwinach.

Czy istnieje sposób, w jaki mogę wyśmiewać moją Mongoose DB, aby móc zwracać statyczne dane w moich testach? Raczej nie będę musiał konfigurować testu DB i wypełniać go danymi dla każdego testu jednostkowego.

Czy ktoś jeszcze to napotkał?

Odpowiedz

6

Rozwiązałem to przez trochę trochę strukturyzacji mojego kodu. Wszystkie moje rzeczy związane z mangiem przechowuję w osobnych klasach z API, takimi jak "zapisz", "znajdź", "usuń" i żadna inna klasa nie ma bezpośredniego dostępu do bazy danych. Potem po prostu kpię z tych testów, które opierają się na danych.

Zrobiłem coś podobnego z rzeczywistymi obiektami, które zostały zwrócone. Dla każdego modelu, jaki mam w mangurze, mam odpowiednią klasę, która owija ją i dostarcza metody dostępu do pól. Te są również łatwo wyśmiać.

+11

czy masz przykład tego w kodzie? – bouncingHippo

8

Ja też szukałem odpowiedzi i skończyłem tutaj. Oto co zrobiłem:

Zacząłem używać mockery do wyszydzania modułu, w którym znajdowały się moje modele. Następnie utworzyłem własny moduł próbny z każdym modelem zawieszonym na nim jako właściwość. Te właściwości zawijają rzeczywiste modele (tak, że istnieją właściwości podrzędne dla testowanego kodu). A potem nadpisuję metody, którymi chcę manipulować w celu przeprowadzenia testu, takiego jak zapis. Miało to tę zaletę, że szyderstwo było w stanie cofnąć kpiny.

ale ...

I naprawdę nie obchodzi tyle o odkręcenie szyderczy napisać właściwości otoki dla każdego modelu. Teraz potrzebuję tylko mojego modułu i nadpisuję funkcje, którymi chcę manipulować. Prawdopodobnie przeprowadzę testy w oddzielnych procesach, jeśli stanie się to problemem.

W ramach ustalenia moich testów:

// mock out database saves 
var db = require("../../schema"); 
db.Model1.prototype.save = function(callback) { 
    console.log("in the mock"); 
    callback(); 
}; 
db.Model2.prototype.save = function(callback) { 
    console.log("in the mock"); 
    callback("mock staged an error for testing purposes"); 
}; 
+0

zrobiłeś to z NodeJS? – bouncingHippo

+0

co to jest 'schema.js'? – Michelle

+0

@Michelle najprawdopodobniej definicja schematu mangusty – sshow

6

Również warto wspomnieć:
mockgoose - W pamięci DB że kpi Mongoose, w celach testowych.
monckoose - Podobny, ale przyjmuje inne podejście (Implementuje fałszywy sterownik). Wydaje się, że Monckoose jest niepublikowane od marca 2015.

+0

Twój drugi link nie działa, wydaje się, że został niepublikowany. –

+0

@KevinB dzięki, zaktualizowany –