2013-04-19 17 views
7

Próbuję przetestować długość atrybutu kodu pocztowego, aby mieć 5 znaków długości. Obecnie testuję, aby upewnić się, że nie jest pusta, a następnie zbyt krótka z 4 znakami i zbyt długa z 6 znakami.Czy istnieje test rspec dla dokładnej długości atrybutu?

Czy istnieje sposób na sprawdzenie, czy jest to dokładnie 5 znaków? Do tej pory nie znalazłem nic online lub w książce rspec.

Odpowiedz

2

Jeśli testujesz sprawdzanie poprawności w modelu ActiveRecord, polecam wypróbowanie shoulda-matchers. Zapewnia szereg użytecznych rozszerzeń RSpec przydatnych dla Rails. Można napisać prosty liniowy spec atrybutu Kod pocztowy:

describe Address do 
    it { should ensure_length_of(:zip_code).is_equal_to(5).with_message(/invalid/) } 
end 
11

RSpec Pozwala to:

expect("this string").to have(5).characters 

Rzeczywiście można napisać coś zamiast „znaki”, to po prostu cukier syntaktyczny. Wszystko, co się dzieje, to to, że RSpec wywołuje #length na ten temat.

Jednak, z pytaniem brzmi to rzeczywiście chcesz przetestować walidacji, w tym przypadku chciałbym folow @ poradę rossta użytkownika.

UPDATE:

Od RSpec 3, to nie jest już częścią rspec-oczekiwaniom, ale jest dostępny jako oddzielny gem: https://github.com/rspec/rspec-collection_matchers

9

Nie ma bardziej have dopasowujący w najnowszej wersji głównej z RSpec .

Od RSpec 3.1, poprawny sposób, aby przetestować to:

expect("Some string".length).to be(11)

0

dopasowujących Collection (wszystkie dopasowujących że dochodzić od smyczki, skrótów i tablic) zostały wyabstrahowane się do klejnotu indywidualne, rspec-collection_matchers .

Aby wykorzystać te dopasowujące dodać do swojej Gemfile:

gem 'rspec-collection_matchers' 

lub swojej .gemspec jeśli pracujesz na gem:

spec.add_development_dependency 'rspec-collection_matchers' 

Następnie dodać do swojej spec_helper.rb:

require 'rspec/collection_matchers' 

A następnie będziesz mógł skorzystać dopasowujących kolekcję w swojej specyfikacji:

require spec_helper 
describe 'array' do 
    subject { [1,2,3] } 
    it { is_expected.to have(3).items } 
    it { is_expected.to_not have(2).items } 
    it { is_expected.to_not have(4).items } 

    it { is_expected.to have_exactly(3).items } 
    it { is_expected.to_not have_exactly(2).items } 
    it { is_expected.to_not have_exactly(4).items } 

    it { is_expected.to have_at_least(2).items } 
    it { is_expected.to have_at_most(4).items } 

    # deliberate failures 
    it { is_expected.to_not have(3).items } 
    it { is_expected.to have(2).items } 
    it { is_expected.to have(4).items } 

    it { is_expected.to_not have_exactly(3).items } 
    it { is_expected.to have_exactly(2).items } 
    it { is_expected.to have_exactly(4).items } 

    it { is_expected.to have_at_least(4).items } 
    it { is_expected.to have_at_most(2).items } 
end 

pamiętać, że można użyć items i characters zamiennie, są one po prostu składnia cukru, a have dopasowujący i jego odmiany, może być używany na tablic, skrótów i Twojego ciąg .

Powiązane problemy