2016-06-22 1 views
1

私はCapybaraのRSpecテストをRailsアプリケーションで作成しています。私は、アプリケーションのホームページを読み込んで、特定の要素がページに存在するかどうかテストしたいと思います。これを行うには、私は、特にこれらの束を持っているような同じitブロック内のステートメントを期待していないページを1回訪問しますが、Capybara/RSpecでブロックを区切ります

context "Logo is present" do 
    it "is configured properly" do 
    visit root_path 
    expect(page.find("a.logo")[:alt]).to have_content("blah") 
    expect(page.find("a.title")[:alt]).to have_content("title") 
    ... 4 more expect lines here ... 
    end 
end 

のようなものを書いています。私はむしろ別のそれのブロックを持っており、このような何かしたい:

context "Logo is present" do 
    before(:all) {visit root_path} 
    it "has a valid alt" do 
    expect(page.find("a.logo")[:alt]).to have_content("blah") 
    end 

    it "has a valid title" do 
    expect(page.find("a.title")[:alt]).to have_content("title")  
    end 

    ... 4 more it lines here ... 
end 

問題がbefore(:all) {visit root_path}への呼び出しです。私はそれがすべてのitブロックの前に1回実行されることを望んでいました。残念ながら、最初のitブロックが実行された後、カピバラがページを裂くように見えるので、最初のブロックを除くすべてのitブロックは失敗します。

ページを一度訪れて、そのページを使用する複数のitブロックを持つ方法はありますか?私は別々のitブロックを持っているときにページを複数回訪問することの代価を支払うことを避けようとしています。

答えて

1

いいえ - rspecテストの全ポイントは、それらがお互いから隔離されていることです。また、実際に表示されているテストの種類は、フィーチャ仕様よりも表示仕様(カピバラマッチャーは表示仕様で使用可能)である必要があります。

関連する問題