2011-06-22 34 views
1

我想用rspec做一些事情,我無法在需要它們的地方訪問我需要的變量。例如:rspec變量在不同的上下文/作用域

describe "some things" do 
    it "should have things in App" do 
    App.things.should_not be_nil #no problems here 
    # puts App.things.count 
    # => 10 
    end 

# puts App.things.count 
# => 0 
App.things.each do |thing| 
    #this doesn't work at all as App.things is empty 
    it "#{thing.title} should have an account number" do 
     thing.acc_no.should_not be_nil 
    end 
end 

我想這是因爲不同的塊被調用的時間。或者,也許我完全錯過了這一點。

我需要迭代'事物'並對每個事物做出斷言,但是我不能這麼做,因爲事物在describe塊的上下文中沒有任何元素,只有在它的塊內。

任何幫助?

回答

0

看來你做錯了:爲什麼要測試一個集合的每一個值?

  • 創建一些夾具和測試應用程序具有創建的對象

  • 使用創建的燈具之一,以測試有正確的價值觀,運行驗證等的正確數量...

至少,你可以使用的RSpec的共享實例重複共同測試:

http://blog.davidchelimsky.net/2010/11/07/specifying-mixins-with-shared-example-groups-in-rspec-2/

+0

我正在測試水豚。我需要確保dom中的對象具有正確的狀態。 – user810416

+0

所以使用capybara的xpath並迭代結果,但該代碼不起作用。順便說一句,創建一個測試,並在它內部檢查(例如做兩個數組之間的比較) –

0

我不知道這是否有幫助,但我有類似的問題。我想迭代「it」塊的原因是,rspec失敗消息將包含我正在迭代的事物的名稱。

就我而言,這是一系列可能包含或不包含div的dom id,具體取決於頁面上不同對象的狀態。

,所以我做:

%w{preliminary_project_proposal final_project_proposal progress_report preliminary_abstract final_abstract preliminary_presentation final_presentation}.each do |id| 
    it "should not show a late message for #{id}" do 
    within "##{id}" do 
     page.should_not have_css('.late_assignment')   
    end    
    end   
end 

這工作得很好。正如你所指出的,我無法將數組賦值移動到一個變量或一個方法,這意味着它出現在幾個地方,這不是很漂亮。