Jaki jest poprawny format korzystania z shoulda-matchers i nowego numeru RSpec: expect syntax?shoulda-matchers RSpec oczekują składni
Odpowiedz
Choć można oczywiście użyć shoulda-dopasowujących z nową składnią spodziewać się następująco:
it 'should validate presence of :email' do
expect(subject).to validate_presence_of :email
end
lub bardziej zwięzły, ale mniej czytelnej:
it { expect(subject).to validate_presence_of :email }
formatu jednej-liner should
te Matchery są zazwyczaj używane, ponieważ są wyraźnie obsługiwane w wersji 2.14, nawet jeśli są to config.syntax == :expect
. Kiedy should
jest używany z zastrzeżeniem jak w niejawny:
describe User
it { should validate_presence_of :email }
end
nie polegać na łatanie małpa Kernel
że should
inaczej zależy.
Jest to objęte https://github.com/rspec/rspec-expectations/blob/master/Should.md. W rzeczywistości dokumentacja ta wykorzystuje nawet powyższy przykład matchera do zilustrowania tego wyjątku.
Zobacz także Using implicit `subject` with `expect` in RSpec-2.11, która omawia opcję konfiguracji, która pozwala używać jako alternatywy dla it
.
expect_it { to validate_presence_of :email }
Aktualizacja: Jak z RSpec 3.0 (beta2), będzie również mieć możliwość korzystania z:
it { is_expected.to validate_presence_of :email }
Pierwszy blok będzie również otoczony przez 'desribe User', prawda? Wygląda to jak porównanie 3 linii z 3 różnymi liniami, ale nie do końca. Jeśli tak, to może chcieć dodać to dla jasności w pierwszym bloku kodu. –
@MichaelDurrant Tak, to by było. Zgoda. Dzięki za wskazanie tego. Odpowiedź zaktualizowana. –
Ktoś ma pojęcie o tym, po co jest downvote? Czy jest to związane z bliskimi głosami, ponieważ jest to "głównie oparte na opiniach"? –
będę Suplement Odpowiedź @ peter-alfvin. W przypadku testowania modelu i jego migrację się z shoulda-matchers
nie można używać :expect
poza it
bloku, więc nie można napisać:
RSpec.describe ModelName, type: :model do
expect(subject).to belong_to(:user)
end
I dostaniesz expection:
`expect` is not available on an example group (e.g. a `describe` or `context` block).
ale poprawna wersja to:
RSpec.describe ModelName, type: :model do
it { expect(subject).to belong_to(:user) }
end
- 1. Czy skrypty oczekują na naukę?
- 2. Czego ludzie oczekują od trwałego słownika .NET?
- 3. RSpec: Metoda prywatna Stub
- 4. składni heredoc błąd składni
- 5. Rspec 3 vs Rspec 2 matchers
- 6. Testowanie zagnieżdżonych atrybutów rspec z rspec
- 7. Rspec: testowanie przypisania zmiennej instancji
- 8. Stubbing ActionMailer w Rspec
- 9. RSpec Nieaktualne
- 10. Jak mogę anulować instalację w rspec 3 bez włączania starej składni?
- 11. Błąd składni SQL błąd tworzenia składni
- 12. Capybara + RSpec, katalog spec/features jest ignorowany przez rspec. dowództwo?
- 13. jaki jest nowy odpowiednik Rspec any_instance w Rspec 3?
- 14. Jak przekonwertować errors_on na składnię RSpec 3?
- 15. rspec duży dopasowujący dziesiętny
- 16. Runnin rspec z IntelliJ
- 17. RSpec any_instance return self
- 18. RSpec - Testowanie mocnych parametrów
- 19. rspec - stub metoda moduł
- 20. Łączenie filtrów RSpec?
- 21. Przykład makiety RSpec Przykład
- 22. rspec ignoruje skip_before_filter?
- 23. RSpec: Spodziewana zmiana wielokrotna
- 24. RSpec 2.3 + Devise 1.0.11
- 25. Testowanie ActiveAdmin z rspec
- 26. Testowanie zmiennych klasy RSpec
- 27. Ogórek vs. RSpec
- 28. RSpec: Testowanie rescue_from
- 29. rspec testowanie carrierwave - nowicjusz
- 30. Rspec: Testowanie ActiveRecord :: Base.connection.execute
Przepraszam, miałem na myśli, powinienem być – trev9065
Jeśli chodzi o głosowanie na zakończenie, opierając się głównie na opiniach, Uważam, że ten konkretny przypadek pytania, czy coś jest "dobrym pomysłem", jest wyjątkiem, ponieważ istnieje uzasadnienie oparte na faktach, że problem nie dotyczy problemu. –
dokonał edycji szczegółów quesrion, aby był odpowiedni dla SO. –