私のダッシュボードページには、ユーザーが持っている目標の数を示すメトリックセクションがあります。私は目標がないユーザーのためにこのセクションを表示しません。ユーザーがゴールを作成し、リダイレクト後にメトリックセクションが表示されます。私の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
私はあなたの質問を理解していません。 2番目の説明では、メトリックについては何も期待していません。 –
@DaveSchweisguthそれは正しいですが、2番目の記述の後に実行されると、最初の記述は失敗します(目標を作成してメトリックが表示されるため)。最初のDescribeが最初に実行されると、テスト全体がパスします。私はこれらのテストをお互いに独立して実行したい。 –
ああ、RSpecはテストをランダムな順序で実行しています。私は明らかにした。 –