2013-04-19 18 views
7

5 karakter uzunluğundan emin olmak için bir zip kodu özniteliğinin uzunluğunu test etmeye çalışıyorum. Şu anda boş olmadığını ve 4 karakterle çok kısa olduğunu ve 6 karakterle çok uzun olduğunu test ediyorum.Bir özelliğin tam uzunluğu için bir rspec testi var mı?

tam 5 karakter olmak bunu test etmek için bir yol var mı? Şimdiye kadar çevrimiçi veya rspec kitabında hiçbir şey bulamadım.

cevap

2

Bir ActiveRecord modelinde bir doğrulama sınamıyorsanız, shoulda-matchers'u denemenizi öneririz. Rails için yararlı bir dizi yararlı RSpec uzantısı sağlar. Eğer posta kodu özelliği için basit bir satır spec yazabiliriz:

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

RSpec bu sağlar:

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

Aslında yerine 'karakteri' bir şey yazabilir, sadece sözdizimsel şeker var. Tüm olanlar, RSpec'in konuyla ilgili #length numarasını aradığını gösteriyor. aslında ben rossta tavsiyesine @ folow hangi durumda doğrulama, test etmek istediğiniz gibi Ancak

, sorunuza gelen bu sesler.

GÜNCELLEME:

RSpec 3 yılından bu yana, bu RSpec-beklentilerin artık bir parçası olmakla birlikte, ayrı bir mücevher olarak mevcuttur: https://github.com/rspec/rspec-collection_matchers

9

RSpec en son ana sürümde artık have eşleştirici yoktur .

RSpec 3.1 itibariyle bu sınamak için en doğru yoludur: ayrı mücevher içine soyutlanmış

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

0

Koleksiyon matchers (dizeleri, sağlamalarının ve diziler karşı olduğunu beyan eden tüm matchers), rspec-collection_matchers . Eğer bir taş üzerinde çalışıyorsanız

gem 'rspec-collection_matchers' 

Ya senin .gemspec: Bu matchers sizin Gemfile eklemek bu kullanmak için

spec.add_development_dependency 'rspec-collection_matchers' 

Ardından, spec_helper.rb bu ekleyin:

require 'rspec/collection_matchers' 

Ve sonra kullanabileceksiniz senin spec toplama matchers: Eğer birbirlerinin yerine items ve characters kullanabilirsiniz

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 

Not onlar sadece sözdizimi şeker, ve have eşleştirici ve bunun varyantları, diziler, sağlamalarının ve dize kullanılabilir .

İlgili konular