Rspec

2016-03-28 22 views
0

'deki test doğruları için kısa yol Doğrulamaları test etmenin kolay bir yolunu bulmak istiyorum. Test odağım entegrasyonlar, doğrulamalar değil, TDD ile çalışmıyorum.Rspec

# Estate model specs 

describe "#name" do 
    it "is required" do 
    estate.name = nil 
    estate.valid? 
    expect(estate.errors).to have_key(:name) 
    end 
end 

describe "#company" do 
    it "is required" do 
    estate.company = nil 
    estate.valid? 
    expect(estate.errors).to have_key(:company) 
    end 
end 

# and so on.. 

bazı benzerine: Ben değiştirmek istiyor, söyleniyor

# Estate model specs 

requiredFields = [:name, :company, :price, :region, :regions, :typologies, :image] 
requiredFields.each do |requiredField| 
    describe "##{requiredField}" do 
    it "is required" do 
     estate[requiredField] = nil 
     estate.valid? 
     expect(estate.errors).to have_key(requiredField) 
    end 
    end 
end 

alanları adı ve fiyatı işleri, sorun dernekler içinde:

Estate 
    is an instance of Estate 
    validations 
    with required fields 
     should be valid 
    #name 
     is required 
    #company 
     is required (FAILED - 1) 
    #price 
     is required 
    #region 
     is required (FAILED - 2) 
    ... 

ben düşünüyorum Sorun, estate[requiredField]. Şirket_id'e geçersem çalışır. Foreach'da estate.requiredField gibi bir şeyi nasıl yapabilirim?

cevap

2

alıcının üzerindeki bir yöntem olarak argüman çağırır Ruby'nin send yöntemi kullanılarak estate.requiredField gerçekleştirebilirsiniz:

estate.send(requiredField) 

Eğer atıyorsanız olduğundan, alan adını içine bir = arasına sokmak gerekir. send alıcı içinden istenen yöntemini çağırarak biter beri, sen sona ihtimalidir Dikkat edilmesi gereken

estate.send("#{requiredField}=", nil)` 

şey: foo= yöntem yöntem adından sonra send devam argümanlar olarak geçirmek bir argüman almaktadır protected veya private yöntemlerini atlayarak.

class Dog 
    private 
    def bark 
    puts 'Woof' 
    end 
end 

Dog.new.bark 
# NoMethodError: private method 'bark' called for #<Dog:0x007fd28bad7590> 

Dog.new.send :bark 
# Woof