2013-10-29 13 views
21

Ben benim testlerin çoğu içeride Aşağıdaki kod:, önce: Tüm blokta

describe 'index' 
let(:company) { FactoryGirl.create(:company) } 
let(:user) { FactoryGirl.create(:user, company: company) } 

before do 
    sign_in user 
    visit products_path 
end 
... 
end 

Ama şu uyarıyı alıyorum:

WARNING: let declaration 'user' accessed in a 'before(:all)' 

Sorum , bunu yapmanın doğru yolu nedir? Uyarının kendisi hakkında fazla bilgi bulamıyorum.

Teşekkürler!

DÜZENLEME: Amacım ben kullanıcıyı imzalar, hangi sign_in onu geçmek, böylece kullanıcı değişken kullanın ve başka testlerde daha sonra kullanmaktır (ı Kullanıcı şirket özniteliği için kontrol edin)

+2

Bu doğru yol gibi görünüyor. Görmediğimiz bir "önce (: hepsi)" olmadığından emin misiniz? – zetetic

+0

Evet, göstermediğiniz _was_ a 'önce (: all)' varsadım. Durum böyle değil mi? –

+0

'Index', tahmin edeceğiniz gibi, üst düzey tanım bloğunuzu değil, bunun üzerinde başka bir açıklama veya bağlam bloğuyla iç içe geçmiş mi? Başka bir deyişle, bir şey miras almadığınıza emin misiniz? Ayrıca, 'önce yap 'önce ile aynıdır: her bir' yapmak. Onun ima ettiği. Tüm spec dosyasını gösterebilir misin? – fontno

cevap

20

ben aynı problem vardı, ben bütün değişkenleri bildirerek bunu çözdük before bloğun içine niteliklerini:

 
describe 'index' 

before(:all) do 
    @company = FactoryGirl.create(:company) 
    @user = FactoryGirl.create(:user, company: @company) 

    sign_in @user 
    visit products_path 
end 
... 
end 

Artık testler içine @user ve @company kullanabilir ve herhangi bir uyarı olmamalıdır.

+1

Tam olarak bunu yapmak bitti. Nedense onun tarzını gerçekten sevmiyorum, ama şu an için problemi çözüyor. Teşekkürler! –

1

"Bunu yapmanın doğru yolu nedir" deki "bu" ile ne demek istediğinden emin değilim? Bir before(:all) içinde let ve subject erişme kaldırılmıştır ve https://github.com/rspec/rspec-core/pull/857 aşağıdaki açıklama ile RSpec 3'te kaldırılır: bunlar tanımlamak için mevcut olarak

let ve subject Beyanlardaki before(:all) kanca çağrılacak amaçlanmamıştır Her bir örnek arasında sıfırlanırken, before(:all), öğesinin bir örnek grubundaki örneklerle paylaşıldığı durumunu tanımlamak için vardır.

+0

Kodlarını daha önce kullanmadan önce (: all) kullanıyorum, hemen önce. – Trejkaz

+0

@trejkaz, soruya göre, ben gösterilmemiş bir 'açıklama' bloğu içeren bir 'let' olup olmadığını merak eden bir grup insandan biriydi. Poster bütün spec dosyasını yükleyeceğini söyledi, ama hiç yapmadıklarını görebiliyorum. –

0

hesap Peter cevap önüne alındığında Doğru yolu, her blokta önce kullanıcıyı erişmeye olduğunu düşünüyorum:

before(:each) do 
    sign_in user 
end 
+2

Hala Kullanımdan kaldırılmış uyarı alıyorum ... –