2012-01-02 21 views
9

RailsアプリケーションのCapybaraテストスイートでrspecモックを使用してログインしたユーザー(Devise/Warden)をスタブアウトしたいとします。これは時間を節約し、テストスイートを定期的に実行できることを意味します。今私は工夫を使用していることを、私はもはやUserSessionオブジェクトへのアクセス権を持っているCapybaraテストでRspecを使用してWarden/Deviseをスタブする方法

def login(user) 
    user_session = mock_model(UserSession, {:user => user}) 
    UserSession.stub(:find).and_return(user_session) 
end 

は、以前私はこのようないくつかのコードで私のセッションモデルをスタブすることにより、この使用authlogicを行うことができませんでした。私はコードをテストするためにcapybaraを使用しているので、私はsign_inテストヘルパーで構築されたdeviseを使うためにリクエストオブジェクトに直接アクセスすることはできません。

私の質問は、ログインしたユーザーが最初にサインアップパスに行き、フォームに記入して送信し、待機する必要なく、capybara、devise、およびspec mockでログインしたユーザーをシミュレートするにはどうすればいいですか?応答を求めて、目的のページに移動しますか?

+1

だけではなく、ケース[login.rb](中https://github.com/gitlabhq/gitlabhq /blob/master/spec/support/login.rb)と[sample_use.rb](https://github.com/gitlabhq/gitlabhq/blob/master/spec/requests/dashboard_issues_spec.rb) – clyfe

+0

応答をありがとう、私はすでにそれを避けようとしているようなものを持っています。あなたのコメントは確かにそうでないかもしれないそれらの将来の訪問者のために確かに役立つが。 – Schneems

答えて

15

ワーデンには、テストヘルパーが組み込まれています。あなたのキュウリ試験でUIを使わなくてもログインすることができます。以下のファイルをプロジェクトに追加してください。あなたが尋ねたが、何

# features/support/warden.rb

Warden.test_mode! 
World Warden::Test::Helpers 
After { Warden.test_reset! } 

# features/step_definitions/user_steps.rb

Given /^I am logged in as a user$/ do 
    @current_user = User.create!(:username => 'user', :password => 'password') 
    login_as(@current_user, :scope => :user) 
end 

Use Wardens.test_mode! with Capybara

+0

これは正しい方向だと思っていますが、うまく動作することはできません。ヘルパーメソッドは正しく呼び出されますが、current_userなど。私のアプリではまだ正しく表示されていません。これはあなたのために働きますか? – Schneems

+2

私は現在のスコープ 'login_as @current_user、:scope =>:user'を助けてくれました – Schneems

+1

カピバラのページにリンクしてくれてありがとうと、実際に^ _^https://github.com/plataformatec/devise/wiki/How-To: - テストカピバラ/ _history – Schneems

関連する問題