2013-10-29 6 views
21

मेरे पास है मेरे परीक्षण के सबसे अंदर निम्नलिखित कोड:RSpec में, वेरिएबल के अंदर जाने उपयोग करने से पहले: सभी ब्लॉक

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

before do 
    sign_in user 
    visit products_path 
end 
... 
end 

लेकिन मैं निम्न चेतावनी हो रही है:

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

मेरा प्रश्न यह करने का सही तरीका क्या है? मुझे चेतावनी के बारे में ज्यादा जानकारी नहीं मिल रही है।

धन्यवाद!

संपादित करें: मेरा लक्ष्य उपयोगकर्ता चर उपयोग करती हैं इसलिए मैं इसे sign_in करने के लिए, जिसमें उपयोगकर्ता संकेत पर पारित कर सकते हैं, और एक अन्य परीक्षणों पर बाद में इसका इस्तेमाल करने की है (मैं उपयोगकर्ता कंपनी विशेषता के लिए जाँच)

+2

ऐसा लगता है कि यह सही तरीका है। क्या आप सुनिश्चित हैं कि 'पहले (सभी)' नहीं है जिसे हम नहीं देख रहे हैं? – zetetic

+0

हाँ, मुझे लगता है कि _was_ एक 'पहले (: सभी)' जो आप नहीं दिखा रहे थे। क्या यह मामला नहीं है? –

+0

'इंडेक्स', अनुमान लगा रहा है, न कि आपके शीर्ष स्तर का वर्णन ब्लॉक, क्या यह उपरोक्त किसी अन्य वर्णन या संदर्भ ब्लॉक में घिरा हुआ है? दूसरे शब्दों में, क्या आप वाकई कुछ विरासत में नहीं हैं। साथ ही, 'पहले से पहले' पहले जैसा ही है: प्रत्येक do'। इसका निहित क्या आप पूरी spec फ़ाइल दिखा सकते हैं? – fontno

उत्तर

20

मैं एक ही समस्या थी, मैं इसे के रूप में मेरे सभी चर की घोषणा के द्वारा हल कर लिया है before ब्लॉक के अंदर गुण:

 
describe 'index' 

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

    sign_in @user 
    visit products_path 
end 
... 
end 

अब आप @user और @company अपने परीक्षण के अंदर उपयोग कर सकते हैं, और आप कोई चेतावनी नहीं होना चाहिए।

+1

यह ठीक से कर रहा है। किसी कारण से मुझे वास्तव में इसकी शैली पसंद नहीं है, लेकिन यह समय के लिए समस्या हल करती है। धन्यवाद! –

1

मुझे यकीन नहीं है कि "यह" में आपका क्या मतलब है "यह करने का सही तरीका क्या है"? let और subject तक पहुंचना एक before(:all) भीतर हटा दिया गया है और https://github.com/rspec/rspec-core/pull/857 से निम्नलिखित विवरण के साथ RSpec 3 में निकाल दिया जाएगा:

let और subject घोषणाओं एक before(:all) हुक में कहा जाने का इरादा नहीं है, जैसा कि वे परिभाषित करने के लिए मौजूद हैं प्रत्येक उदाहरण के बीच रीसेट कर दिया गया है, जबकि before(:all) राज्य को परिभाषित करने के लिए मौजूद है कि उदाहरण समूह में उदाहरणों में साझा किया गया है।

+0

मुझे पहले (: सभी) का उपयोग करके अपना कोड नहीं दिखाई देता है, हालांकि पहले। – Trejkaz

+0

@trejkaz, प्रश्न पर टिप्पणियों के अनुसार, मैं लोगों के एक समूह में से एक था जो सोच रहा था कि क्या 'युक्त' एक 'वर्णन' ब्लॉक में दिखाया गया था जो दिखाया नहीं गया था। पोस्टर ने कहा कि वह पूरी स्पेक फ़ाइल अपलोड करेगा, लेकिन मैं देख सकता हूं कि उन्होंने कभी नहीं किया। –

0

खाता पीटर जवाब में रखते हुए मुझे लगता है कि सही तरीका प्रत्येक ब्लॉक से पहले एक में उपयोगकर्ता का उपयोग करने के लिए है:

before(:each) do 
    sign_in user 
end 
+2

मुझे अभी भी अस्वीकृत चेतावनी मिलती है ... –

संबंधित मुद्दे