2012-06-11 7 views
7

私はrails 3.2とDeviseを使っているアプリケーションを持っています。私はrspecとCapybaraを使ってリクエストテストスイートを持っています。Rails 3 with Deviseとrspec:テストヘルパーの信頼性を失う

Capybaraにサインインフォームを記入して提出するのではなく、サインインヘルパーでWardenテストヘルパーを使用することに移行しようとしました。私のテストスイートのサイズと複雑さのため、これはテストランタイムの節約額の半分以上をもたらします。私の構成では

は次のとおりです。

RSpec.configure do |config| 
    config.include Warden::Test::Helpers, :type => :request 
    config.after :each do 
    Warden.test_reset! 
    end 
end 

とコンテキストで:

let!(:current_user) { FactoryGirl.create(:user) } 

background do 
    login_as(current_user, :scope => :user) 
end 

これらの構成を使用してテストスイートを実行するときしかし、ほぼすべてのテストの実行が原因異なるランダムに失敗し、要求スペックを持っています(具体的には、user_signed_in?の条件で制御されるリンク)

My questio n:他の誰かがこのような信頼できないことに遭遇し、それをどのように緩和することができますか?

答えて

1

最も簡単なことは、before :eachブロックでsign_inフォームを使用することです。コントローラのスペックにテストヘルパーが必要です。これは、デベロッパとは隔離されているからです。あなたは統合テストでそのような問題はありません。

+1

私はこれが最も簡単で、それが私が今使っている解決策であることに同意します。しかし、私は本当に1分半でテストを中止したいと思っています。 –

+0

'user_session_path'に電子メール/パスワードを投稿してみましたか? – DVG

+0

はい、セレンでうまく動作しますが、セレンとFirefoxの問題により、データをURLに直接ポスティングすることをサポートしていないcapybara-webkitが使用されています。 –

0

私はRails 4.1とWarden 1.2.3にもこの問題があります。私はWardenの新しいバージョンがテストヘルパーに協力していることに気付きました。誰でも新しいバージョンでの成功?

Btw私が観察する動作は、Wardenがlogin_asヘルパー経由でログインに成功するとは限りません。その結果、私のアプリはログインページになっているはずだと思った場所ではなく、自分自身がログインページに表示されます。

+0

私はWarden 1.2.6でRails 4.1.16を使用しています。 –

関連する問題