2009-06-12 13 views
10

'dan toplanmıyor Görünüşüme daha fazla rspec testi ekliyorum ve /lib/scoring_methods.rb dosyasında bulunan ScoringMethods modülünü test etmek istiyorum. Bu yüzden bir/spec/lib dizini ekledim ve orada scoring_methods_spec.rb ekledim. Ben spec_helper gerekli ve böylece açıklamak bloğu kurmak:Kütüphane modülü için rspec testinin eklenmesi Beklentiler ve Kibritler

require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') 

describe ScoringMethods do 

    describe "should have scorePublicContest method" do 
    methods = ScoringMethods.instance_methods 
    methods[0].should match(/scorePublicContest/) 
    end 
end 

Şimdi methods[0] bir dize ve düzenli ifade ile kamu yöntem adı eşleşen bir sorun yoktur. Ve "spec_helper" için göreli yol doğru.

Sorun, tüm kurulumun rspec kitaplığını kullanmadığı görülüyor. Running örnek verimleri:

./spec/lib/scoring_methods_spec.rb:7: undefined method `match' for Spec::Rails::Example::RailsExampleGroup::Subclass_1::Subclass_1:Class (NoMethodError) 
    ... 

tüm Beklenti ve eşleştirici desteği eksik görünüyor. Benim varsayımımı test etmek için, "is_instance_of" ifadesini "is_foobar_of" olarak değiştirerek çalışan bir yardımcı değişkeni değiştirdim. Bu test basitçe başarısız olur ve "is_foobar_of" ifadesi hedeflenen nesnenin bir yöntemi değildir; Bu, tüm Spec :: Rails :: Örnek ... hiyerarşisi mevcut değil.

Diğer eşleştiricileri kullanmayı denedim. "Be_instance_of" ve bazılarını denedim. Öyle görünüyor ki, rspec kütüphanesini düzgün bir şekilde eklemiyorum.

Son olarak, ScoringMethods bir yardımcı modüldür, Yardımcılar aynı modüldür. Bu yüzden bir modülü (Kontrolörler ve Modeller gibi sınıfların aksine) test etmenin mümkün olacağını düşündüm.

Yanlış yaptığım şeyler hakkındaki düşüncelerinizi büyük ölçüde takdir ediyorum. Belki kütüphane modüllerini test etmenin daha etkili bir yolu var mı? Teşekkürler!

cevap

11

Test bloğunu bir "it" bloğuna eklemelisiniz. Örneğin:

require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') 

describe ScoringMethods do 

    describe "should have scorePublicContest method" do 
    it "should have a scorePublicContest method" do 
     methods = ScoringMethods.instance_methods 
     methods[0].should match(/scorePublicContest/) 
    end 
    end 
end 

Döndünüz yöntemler isimleri dosyada mevcut sırada olması garanti edilmez olduğunu göreceksiniz.

Modülleri test ederken sıklıkla kullandığımız bir model, modülü test için oluşturulan sınıfta (spec dosyasının içinde) veya spesifikasyonun içine dahil etmektir.

+1

Mark, Yanıt verdiğiniz için çok teşekkürler. Kesinlikle haklısın! "Bu" bloğu bende yoktu. Çok teşekkürler, Peter –

+2

Ayrıca, Test Modülleri ile ilgili düşünceleriniz için teşekkür ederiz. Modül, yalnızca genel yöntemlerini açığa çıkarmak ve instance_methods çağrısını kullanırken döndürülen yöntemlerin büyük bir listesini almamak için bir sınıfa dahil edilir. Bu şekilde, yeni kamu yöntemlerini modüle ekleyebilir ve açılır listelerde ve benzerlerinde seçim yapmak için kullanılabilirler. Aynı mekanizmayı kullanarak, önerdiğiniz gibi, test etmek için yardımcı olacaktır. –

+0

Müthiş, ayrıca 'it' bloğundan düzgün bir şekilde kapatılmamıştı. –