2016-04-01 1 views
1

私のダッシュボードページには、ユーザーが持っている目標の数を示すメトリックセクションがあります。私は目標がないユーザーのためにこのセクションを表示しません。ユーザーがゴールを作成し、リダイレクト後にメトリックセクションが表示されます。私のRSpecがブロックを互いに独立して記述するようにするには?

以下のRSpecテストでは、RSpecがまず最初にdescribeをランダムに実行すると、メトリックセクションが見つからないためテストにパスします。しかし、RSpecが最初にdescribeブロックを実行すると、最初にdescribeブロックがリダイレクトされ、メトリックセクションが現れたためにブロックが失敗します。

各ブロックを個別に実行してパスするにはどうすればよいですか?

describe "Dashboard Pages", :type => :request do 

    subject { page } 
    let(:user) { FactoryGirl.create(:user) } 

    before(:each) do 
    sign_in user 
    end 

    describe "After user signs in - No Goals added yet" do 

    it { is_expected.to have_title(full_title('Dashboard')) } 
    it { is_expected.to have_content('Signed in successfully')} 

    it "should not show the metrics section" do 
     expect(page).to_not have_css("div#metrics") 
    end 

    end 

    # 
    #Notice that this runs using the SELENIUM WebDriver 
    # 
    describe "After user signs in - Add a new Goal" do 

    it "should display the correct metrics in the dashboard", js: true do 

     click_link "Create Goal"  
     fill_in "Goal Name", :with=> "Goal - 1" 
     fill_in "Type a short text describing this goal:", :with => "A random goal!" 
     click_button "Save Goal" 
    end 

    end 

end 
+1

私はあなたの質問を理解していません。 2番目の説明では、メトリックについては何も期待していません。 –

+0

@DaveSchweisguthそれは正しいですが、2番目の記述の後に実行されると、最初の記述は失敗します(目標を作成してメトリックが表示されるため)。最初のDescribeが最初に実行されると、テスト全体がパスします。私はこれらのテストをお互いに独立して実行したい。 –

+0

ああ、RSpecはテストをランダムな順序で実行しています。私は明らかにした。 –

答えて

2

私はあなたの問題は、そのテストが完了した後click_button "Save Goal"によって送信された要求がサーバに到着したということだと思います。 CapybaraのJavascriptドライバは非同期であり、完了するためにブラウザに送信するコマンドを待つことはありません。

カピバラを待つ通常の方法は、待つコマンドが完了したときに真となるページについて何かを期待することです。これは、最後のテストで実際にメトリックが表示されているとは思わないので、ここには良いアイデアです。

it "should display the correct metrics in the dashboard", js: true do 
    click_link "Create Goal"  
    fill_in "Goal Name", :with=> "Goal - 1" 
    fill_in "Type a short text describing this goal:", :with => "A random goal!" 
    click_button "Save Goal" 
    expect(page).to have_css("div#metrics") 
end 

はまた、現在のRSpecのとカピバラはあなたが要求仕様にカピバラを使用することはできませんのでご注意:だから、彼らがあることを期待しています。何か他の理由で古いバージョンに縛られていない限り、現在のRSpecとCapybaraにアップグレードし、リクエスト仕様を機能仕様に変換することをお勧めします。

関連する問題