2013-03-02 20 views
98

Jaka jest różnica koncepcyjna między Rspec's feature specs i request specs?RSpec: Jaka jest różnica między funkcją a specyfikacją żądania?

Od docs cecha wyspecjalizoway:

specyfikacje fabularne są testy wysokiego szczebla przeznaczone do wykonywania kromki funkcjonalności przez aplikację. Powinni sterować aplikacją tylko za pomocą zewnętrznego interfejsu, zwykle stron internetowych.

I na żądanie Specyfikacja:

Żądanie specyfikacje zapewniają cienką otoki wokół testów integracyjnych Rails i są zaprojektowanych do jazdy zachowania poprzez pełne stosie, w tym routing (dostarczone przez Rails) oraz bez karczowania (to zależy od ciebie). z prośbą specyfikacji można:

  • określić pojedynczy wniosek
  • określić wiele żądań w wielu kontrolerów
  • określić wiele żądań w wielu sesjach

wiem, że specyfikacje funkcji użyć Capybara i prośby o specyfikacje nie. Ale to nie zasługuje na różne koncepcje.

Odpowiedz

134

Różnica koncepcyjna polega na tym, że zazwyczaj testujesz historię użytkownika, a cała interakcja powinna być prowadzona za pośrednictwem interfejsu użytkownika. W tym momencie pojawia się Capybara. Specyfikacja zamówienia nadal testuje zachowanie aplikacji i nie oczekuje od czytelności, że test akceptacji będzie miał. Tak więc, istnieje funkcja poprawionej składni testów akceptacyjnych.

Różnice techniczne obejmują specyfikacje zleceń wrap Railsowe testy integracyjne, podczas gdy specyfikacje funkcji nie. Oznacza to, że za pomocą specyfikacji zleceń można stosować metody get, post, put, delete i assues against response. Dzięki specyfikacjom funkcji należy prowadzić całą interakcję za pośrednictwem przeglądarki i korzystać z metod takich jak wizyta i dochodzenie przeciwko stronie.

Polecam lekturę funkcji feature_spec.feature w kodzie źródłowym rspec-rails na github. Mam nadzieję, że to pomoże.

+2

Czy poleciłbyś używać zarówno specyfikacji funkcji, jak i żądań, czy jedna z nich jest wystarczająca? (Będąc nowym dla TDD ...) – robertwbradford

+2

Używam obu, @ robertwbradford. Korzystam ze specyfikacji funkcji, aby sterować zewnętrznymi testami - testując doświadczenie użytkownika, a następnie budując funkcjonalność za pomocą testów jednostkowych. Używam specyfikacji zleceń do testowania odpowiedzi - np. w session_spec mogę mieć opis '' GET/login "' blok z oczekiwaniami w 'it' blokach takich jak' spodziewać (response.status) .to eq (200) 'i' spodziewać (odpowiedź) .to render_template (: new) 'lub w 'opisać' POST/sesje" ', a' context "z poprawnymi poświadczeniami" 'blok, z' spodziewać (odpowiedź) .to redirect_to (użytkownik) 'i' follow_redirect !; oczekiwać (response.body) .to include ("Signed in") ' –

+5

Czy używasz również specyfikacji kontrolera? Wygląda na to, że jest trochę duplikacji między testami w specyfikacji zleceń a testami standardowymi. – Ernesto

Powiązane problemy