7

Rails 3.2 と Devise を使用するアプリケーションがあります。rspec と Capybara を使用したリクエスト テスト スイートがあります。

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

私の構成では次のとおりです。

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?条件によって制御されるリンク)

私の質問: 他の誰かがそのような信頼性の低さに遭遇したことがありますか?どうすれば軽減できますか?

4

2 に答える 2

1

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

于 2012-06-12T03:06:03.887 に答える
0

古い投稿ですが、Rails 4.1 と Warden 1.2.3 にもこの問題があります。テスト ヘルパーに対応した新しいバージョンの Warden があることに気付きました。新しいバージョンで成功した人はいますか?

ところで、私が観察した動作は、Warden が login_as ヘルパーを介して常に正常にログインするとは限らないということです。これにより、アプリが本来あるべき場所ではなく、ログイン ページに表示されてしまいます。

于 2016-05-04T16:11:42.003 に答える