2017-01-10 3 views
0

私は奇妙な非常にテストの動作を経験しており、ログイン状態が一貫して処理されていません。なぜこれらのテストは同時に実行されても、それぞれ個別にテストが失敗するのですか?

specはユーザーをログインさせ、(ネストされたまたはネストされていない)インデックスページを訪問し、正しい内容が表示されていることを確認します。レコードは非同期的にフェッチされますが、これは影響があるとは思いません。

各スペックを個別に実行すると、それぞれが通過します。すべての仕様が一緒に実行されると、期待される内容が失われているために失敗します。 save_and_open_pageを使用すると、予想されるインデックスページではなく、ログインページがレンダリングされているためです。

rspecは、すべての仕様が一緒に実行されているにもかかわらず、ユーザーがサインインしていないと思うのはなぜですか?

テストがすべてではJavaScriptを必要とし、この

let(:user) {create :user} 
let(:team) {create :team} 
let(:country) {create :country} 

before :each do 
    login_as(user, scope: :user) 
end 

describe 'unnested' do 
    it 'should have the expected content', :js do 
    visit users_path 
    is_expected.to have_content "some content on the page" 
    end 
end 

describe 'nested by team' do 
    it 'should have the expected content', :js do 
    visit team_users_path(team) 
    is_expected.to have_content "some content on the page" 
    end 
end 

describe 'nested by nationality' do 
    it 'should have the expected content', :js do 
    visit country_users_path(country) 
    is_expected.to have_content "some content on the page" 
    end 
end 

スペック(つまり、ここでは重要であるかどうか私は知らない)のようなものを見て。

認証は工夫によって処理され、ユーザは、すべての仕様は一緒に実行された場合には署名されていないと思いますが、まだ各仕様は個別に渡しRSpecのないなぜrails_helper.rb

config.append_after(:each) do 
    DatabaseCleaner.clean 
    Warden.test_reset! 
end 

が含まれて?

答えて

0

これには時間がかかりました。これを投稿することは、同じ問題に遭遇した他の人に役立つ場合に備えて聞いてください。

くらい検索した後、私は最終的に私が共有DB接続に対処するための修正案を試してみましたthis small mentionlogin_as may not work with Poltergeist when js is enabled on your test scenarios.

ことがわかりました。残念ながら、これは次のエラーの結果:

PG::DuplicatePstatement at /session/users/signin 
ERROR: prepared statement "a1" already exists 

私はTransactional Capybara宝石を使用してみましたが、これはポルターガイストとうまく動作するようには思えませんでした。

最終的に私はlogin_asを完全に破棄し、代わりにログインページを訪問し、電子メールとパスワードを入力し、そのようにログする短い方法を書いた。

この解決策は機能しているようです。それは少しオーバーヘッドを追加するので、私はJSでのテストのためにそれを使用しています。

0

あなたはカピバラの宝石を使用している場合は、使用する必要がない:テストケースとのJS私が何をしたか

このhelps-

scenario "visit with user signed in" do 
    user = FactoryGirl.create(:user) 
    login_as(user, :scope => :user) 
    visit "/" 
    expect(current_path).to eq('/') 
    expect(page).to have_title "Some Random Title" 
end 

場合は、機能仕様を使用してユーザーをログインすることができ、他の方法like-

feature 'User signs in' do 
    before :each do 
    @user = FactoryGirl.create(:user) 
    end 

    scenario "Signing in with correct credentials" do 
    visit "/" 
    fill_in "Email", with: @user.email 
    fill_in "Password", with: @user.password 
    click_button "Log In" 
    expect(current_path).to eq("/login/useremail/verification") 
    expect(page).to have_content "Signed in successfully" 
    end 
end 

あなたのページには、Ajax、このhttps://robots.thoughtbot.com/automatically-wait-for-ajax-with-capybara

を参照している場合
関連する問題