2012-05-23 14 views
10

Jestem początkującym użytkownikiem języka Ruby i przez długi czas dręczyło mnie to pytanie.Czym dokładnie jest słowo kluczowe "powinien" w RSpec Ruby

W pliku RSpec, jeśli napiszemy Book.should <do something>, co to jest słowo kluczowe should? Czy jest członkiem obiektu Book? Jak to się stało, że stał się członkiem obiektu Book? Czy jest to jakaś konstrukcja Ruby? Czy to jest funkcja? Gdzie mogę znaleźć definicję tego, jeśli jest to funkcja lub członek?

+1

To pytanie jest duplikatem http://stackoverflow.com/questions/3105755/ruby-metaprogramming-how-does-rspecs-should-work –

+0

Link nie wyjaśnia, co faktycznie robi. Czym dokładnie jest słowo kluczowe "powinien"? – woodstok

+3

+1 za próbę zrozumienia magii. –

Odpowiedz

11

Po załadowaniu, RSpec zawiera a module do modułu Kernel, który jest zawarty we wszystkich obiektach znanych z Ruby. W ten sposób może udostępnić metodę should wszystkim obiektom. W związku z tym should nie jest słowem kluczowym (jak if, class lub end), ale zwykłą metodą.

Należy pamiętać, że ten mixin jest dostępny tylko w kontekstach RSpec, ponieważ jest "załatany" podczas ładowania lub RSpec.

+0

Tego właśnie szukałem. Dziękuję – woodstok

3

Odpowiedziałem na podobne pytanie do tego here. Zasadniczo:

Myślę, że odpowiedź Holgera może być bardziej wyraźna, i co może być tym, co początkowo cię zdezorientowało, jest to, że should łamie większość zwykłych konwencji dla nazewnictwa metod (na przykład nic nie mówi o tym, co robi) w celu uczynienia kodu jako całości odczytanym jako rodzaj zdania.

Zamiast tworzyć zestaw testów, biblioteka stara się zachęcić użytkownika do opisania aplikacji za pomocą testów w sposób przypominający czytelną dla człowieka specyfikację.

+1

ok. Co powinna zrobić wewnętrznie? – woodstok

+2

Tworzy stwierdzenie, że warunek jest prawdziwy, który będzie działał jako część twojego testu. Podobnie jest z powiedzeniem "assert x == y'. – Russell