2016-11-28 56 views
15

Pracuję nad interfejsem API rails i zamierzam teraz napisać kilka testów RSpec dla kontrolerów. Czytałem w pobliżu i nie byłem w stanie dowiedzieć się, jaka jest faktyczna różnica między specyfikacjami kontrolera i specyfikacjami żądań, a którego prawdopodobnie powinienem użyć, jeśli testuję API.Specyfikacje kontrolera kontra żądania specyfikacji?

+2

Gdybym był tobą, zrezygnowałbym ze specyfikacji kontrolera na rzecz specyfikacji wymagań/integracji. –

Odpowiedz

7

Specyfikacja kontrolera - Specyfikacja kontrolera to opakowanie RSpec do testu funkcjonalnego Rails. To pozwala symulować pojedynczego żądania HTTP w każdym przykładzie, a następnie określ oczekiwanych rezultatów

Żądanie specyfikacje - Zapytanie specyfikacje zapewniają cienką otoki wokół testy integracyjne szynach i są zaprojektowany do jazdy zachowania poprzez pełne stos, w tym routing (dostarczany przez Rails) i bez stubowania (to zależy od ciebie).

Jeśli chcesz przetestować kontrolery interfejsu API, zalecamy testowanie pojedynczych żądań za pomocą Controller specs.

+3

Jeśli używasz starszych wersji Railsów, ogólne zalecane style kodu wydają się być zgodne ze specyfikacją kontrolera. Railsy 5 zmieniły sposób działania testów kontrolerów; są to testy integracyjne i nie można już uzyskać dostępu do elementów wewnętrznych kontrolera. Nie jest dla mnie jasne, czy jest jakiś sens posiadania testów kontrolera. Żądania i specyfikacje funkcji wydają się być zalecanym podejściem do przyszłego rozwoju. https://everydayrails.com/2016/09/05/replace-rspec-controller-tests.html – CJBrew

+0

Mam problem z tym, czy kontrolery testów jednostkowych, czy nie, po prostu wywołując akcję bezpośrednio, a nie za pomocą warstwy http. Czy to jest zalecane? – Jwan622

4

Cytowanie Aaron Sumner:

Zarówno Szyny i zespoły rspec proponujemy zastąpienie lub usunięcie testy kontrolera Twojego w aplikacji (znany również jako warstwy funkcjonalnej testu), w rzecz bezpośredniego testowania modeli (jednostki), lub z testami integracyjnymi wyższego poziomu .

Dla nowego API wolę używać specyfikacji zamówienia i trafiać w moje "punkty końcowe" (inaczej modele i logika biznesowa) niż przy użyciu testów kontrolera.

3

Rzeczywiście, zespół Rspec oficjalnie stwierdza, że ​​specyfikacje kontrolera są obecnie zniechęcane:.

http://rspec.info/blog/2016/07/rspec-3-5-has-been-released/

Dla nowych aplikacji Rails: nie zaleca się dodanie gem szyn-kontroler-testów do aplikacji. Oficjalna rekomendacja zespołu Rails i podstawowego zespołu RSpec polega na napisaniu specyfikacji zleceń . Żądania specyfikacji pozwalają skupić się na pojedynczej akcji kontrolera , ale w przeciwieństwie do testów kontrolera dotyczą routera, stosu oprogramowania pośredniego oraz obu żądań i odpowiedzi szafy. To dodaje realizmu do testu, który piszesz i pomaga uniknąć wielu problemów z , które są typowe w specyfikacjach kontrolera. W Railsach 5, żądania specyfikacji są znacznie szybsze niż oba żądania lub specyfikacje sterowników były w szynach 4, dzięki pracy Eileen Uchitelle1 zespołu Rillerów Rails.