2011-06-22 2 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 

これは、異なるブロックが呼び出された時間のために発生したと思います。あるいは、私はポイントを完全に見逃しているかもしれません。

私は「物事」を繰り返し、それぞれについて主張する必要がありますが、事柄には記述ブロックの文脈に要素がなく、そのブロック内にのみ要素が含まれているため、それを行うことはできません。

助けが必要ですか?

答えて

0

あなたは間違っているようです:なぜコレクションのすべての単一の値をテストするのですか?

  • アプリケーションはなど、検証を実行し、正しい値を持つテストに作成されたオブジェクト

  • 使用作成した備品の1、...

  • の正確な数を持っていることをいくつかの治具やテストを作成

少なくとも、あなたは一般的なテストを繰り返すようにRSpecの共有の例を使用することができます。

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

+0

私はカピバラでテストしています。 domのオブジェクトが正しい状態になっていることを確認する必要があります。 – user810416

+0

だからcapybaraのxpathを使って結果を繰り返しますが、そのコードは機能しません。 btw、1つのテストを作成し、内部をチェックする(例えば、2つの配列の比較を行う) –

0

これが役立つかどうかわかりませんが、同様の問題がありました。私が "it"ブロックを反復したかったのは、rspecの失敗メッセージに反復処理していたものの名前が含まれていたからです。

私の場合は、ページ上のさまざまなオブジェクトのステータスに応じてdivが含まれる場合と含まれない場合があります。

だから私はやった:

%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 

は、これがうまく働きました。あなたが指摘したように、配列の代入を変数またはメソッドに移すことができませんでした。これは、それがいくつかの場所に現れたことを意味していました。

関連する問題