2009-11-09 8 views
11

Czy ktoś może wyjaśnić za pomocą opowieści użytkownika SIMPLE pełny fragment tego, do czego zostanie użyty Ogórek i do jakiego RSpec zostanie użyty? Kupiłem książkę RSpec na drugi dzień i przez nią przechodziłem. Wydaje się, że autor jest dość niejasny.Szyny TDD/BDD Ognisko/Powielanie RSpec

Co mam na myśli, jeśli historia użytkownik jest coś (proszę wybaczyć nieprawidłowości składni, to jest po prostu tak masz punkt):

Gdy użytkownik wprowadzi nieprawidłowy numer telefonu potem dostać komunikat "Nieprawidłowy numer telefonu"

Jeśli wypiszę cały kod dla ogórka, żeby to sprawdzić, a następnie napiszę rzecz o rspec, w zasadzie duplikuję mój test. Czy istnieje scenariusz wyjaśniający, w jaki sposób test ogórka powinien być inny niż test rspec?

Czuję, że duplikujesz testy na obu poziomach przez cały czas.

Jeśli nie ma ostatecznej odpowiedzi na to, zacznę myśleć, że ludzie Ogórek po prostu nie chcieli wchodzić na palce RSpec.

Proszę o pomoc. Czuję, że moja głowa zaraz wybuchnie.

Dzięki!

Odpowiedz

12

Cucumber służy do wyjaśnienia (marka opis) części (historia) wniosku zamiast testy jednostkowe zachowania (co jest przedmiotem RSpec)

Więc testy IMHO Ogórek (opowiadania) nie zastępuj testów rspec.

Testy RSpec mają tendencję do napędzania rozwoju modeli i kontrolerów, a historie zwykle napędzają rozwój poglądów.

Przez opisie Wygląda używasz ogórek zarówno testu historie i zachowanie

+0

Całkowicie się zgadzam, to również było moje doświadczenie. –

2

Ogórek może być użyty do uruchomienia prawie żadnego kodu, dlatego myślę, że jesteś coraz mylić. Ale ogórek nie zapewnia innych rodzajów obiektów testowych, takich jak szydercze i krępujące metody, które sprawiają, że testowanie jednostkowe jest bardziej szczegółowe.

Rzeczy rspec są tak naprawdę adresowane do małych fragmentów zachowania i sprawiają, że wszystko jest bardzo dyskretne. Jeśli znasz testy jednostkowe i ramy, które powinny mieć więcej sensu.

Narzędzie do ogórek jest w stanie tłumaczyć opisy wysokiego poziomu na zestaw działań najwyższego poziomu w systemie.

5

Rspec i Ogórek są niezależne i można używać Ogórek i innych ram testowych do testów (Jednostka testowa, butelka itp.).

Chodzi o to, co chcesz przetestować z ogórkiem? Bo rzeczywiście mógłbyś położyć kres powielania testów, a to nie byłoby naprawdę przydatne, nieprawdaż? :)

Istnieją różne filozofie z ogórkiem.

z ogórkiem można zrobić:

DMA (bezpośrednie znaczenie dostępu model Tak można w pełni przetestować model jak byś zrobił w RSpec)

Symulowane BrowZer (dostęp całą MVC stos nie javascript)

Zautomatyzowane przeglądarka (wykorzystanie webrat i selen dostęp do swoich poglądów, z JavaScript, wolniej, real BrowZer)

Co lubię robić, to używać ogórka, aby sprawdzić, co jest zwracane użytkownikowi. Zwykle ma to dla mnie sens, gdy definiuję moje historie, ponieważ nie mam naprawdę na myśli kodu, który zamierzam napisać. Więc testuję końcowy wynik z Ogórkiem -> widoki (za pomocą symulowanego lub zautomatyzowanego browiera).

Następnie używam programu rspec do testowania dowolnego kodu, który zapisuję w kontrolerach i modelach.

Zatem w przypadku,

Gdy użytkownik wprowadzi nieprawidłowy numer telefonu, a potem dostać komunikat „Nieprawidłowy numer telefonu”

użyłbym Webrat aby sprawdzić, czy użytkownik uzyskać Nieprawidłowy numer telefonu wiadomość w widoku. Użyłbym Rspec do przetestowania działania i modelu kontrolera.

13

Może być przydatne sprawdzenie screencastów pod numerem BDDCasts.com. Przeprowadzą Cię przez proces tworzenia historii i specyfikacji aplikacji. Naprawdę mi pomógł. Również posiadasz książkę rspec, ale wciąż był zdezorientowany. Możesz nawet po prostu sprawdzić ich źródło na githubie.

Dla mnie to wygląda tak:

  • Ogórek przetestować co użytkownik zobaczy. (Test pełnego stosu)

  • Rspec, aby przetestować wszystko. (Model, kontroler)

6

Pomyśl ogórka jak testowanie całą aplikację, od zewnątrz, gdzie RSpec jest testowanie jednostkowe poszczególnych modułów. Zaczynasz od określenia, jakie zachowania chcesz mieć w swojej aplikacji w Cucumber, a następnie przejdź do RSpec i opisz klasy i moduły, które sprawiają, że to zachowanie działa.

Zajęło mi trochę czasu, aby go zdobyć, ale uważam, że Ogórek jest naprawdę dobry do opisywania w szerokim zakresie tego, jakie funkcje ma aplikacja, a RSpec jest naprawdę dobry w opisywaniu, jak powinien to zrobić.

Powiedziałbyś więc w swoich opowieściach o ogórku, jakiego rodzaju funkcji potrzebujesz i napisz super proste kroki, aby dostarczyć dane wejściowe i spojrzeć na wyjście. Następnie opadasz na RSpec i piszesz specyfikacje, w jaki sposób powinien to zrobić.

Załóżmy, że Twoja funkcja to możliwość wyszukiwania nazw użytkowników na stronie internetowej.można napisać funkcję, ogórek i pierwszy (i tylko pierwszej) scenariusz tak:

Feature: Search users 
    In order to find people with similar interests as myself 
    As a user 
    I want to search for people 

Scenario: Search for similar hobbies 
    Given there is a search page 
    And there is a list of hobbies 
    And one of the hobbies is "full contact ironing" 
    When I select "full contact ironing" 
    And press search 
    Then a list of users with the hobby "full contact ironing" are shown 

uruchomić ogórek, to powie Ci kroki tracisz, możesz skopiować te i tworzyć proste kroki, aby sprawdzić dla tych rzeczy, ale nie pisz jeszcze żadnego kodu.

Kiedy skończysz definicje kroków, zejdziesz do RSpec i zaczniesz pisać specyfikacje, jak chcesz, aby to działało. (Ogórek oczywiście należy braku)

describe "SearchController" do 

    it "should respond to searches" do 
    sc = SearchController.new 
    sc.should respond_to(:search) 
    end 

end 

uruchomić rspec i oglądać to fail następnie zgaśnie i napisać kod:

class SearchController 

    def search 
    end 

end 

to wszystko. Teraz ponownie uruchom test. Powinno minąć, więc zacznij się uszczegóławiać i zacznij opisywać, w jaki sposób będziesz faktycznie korzystać z funkcji wyszukiwania. Nie chciałem zbytnio się w to zagłębiać. Chciałem tylko dać ci wyobrażenie, że opisujesz to, czego chcesz w Cucumber, i opisujesz, jak to powinno działać w RSpec.

Oczywiście możesz zrobić wszystko w Ogórku lub w całym RSpecu, ale naprawdę znalazłem Ogórek pomaga mi powiedzieć w bardzo prosty sposób, co chcę, jeśli spróbuję zrobić to w RSpec, utknąłem w szczegółach. Jeśli najpierw użyję Ogórka, żeby opisać podstawową funkcję, którą chcę i dlaczego mogę wpaść do RSpec i powiedzieć, jak chcę, żeby ta funkcja rzeczywiście działała.

Czasami powtarza się w teście, który nie jest bardzo SUCHY, ale jeśli myślisz o tym jako o poziomie szczegółowości, może to nie przeszkadzać Ci tak bardzo. Na początku robiłem wiele powielania wysiłków, dopóki nie uświadomiłem sobie, że powinienem powiedzieć ogólnie, czego chcę w Cucumber, a następnie powiedzieć dokładnie, czego chcę w RSpec.

To tylko jeden pomysł początkującego, jak korzystać z narzędzi, ale jak na razie wygląda to dobrze. Prawdopodobnie dałem ci straszny przykład, ale próbuję po prostu przybliżyć ogólne szczegóły do ​​szczegółów, które uznałem za przydatne przy używaniu narzędzi.

Powiązane problemy