0

私は現在、devise を認証として使用し、capybara + rspec をテスト環境として使用しています。

そして、管理者が予期せずログアウトしたように見えるという奇妙な動作があります。

これが私のテストコードです

require 'spec_helper'                                                                               
require 'helpers/myapp/login_helper'                                                        

describe "Crawler" do                                                                               
  describe "UpdateMainMenus" do                                                                     
    it "should work" do

      @admin = FactoryGirl.create(:myapp_admin)

      login_as @admin, :scope => :admin
      visit admin_cron_jobs_url(subdomain: "myapp")
      current_url.should == admin_cron_jobs_url(subdomain: "myapp")

      puts ""
      puts current_url

      visit admin_cron_jobs_url(subdomain: "myapp")
      current_url.should == admin_cron_jobs_url(subdomain: "myapp")                                


      puts ""
      puts current_url

    end                                                                                             
  end
end

そして helpers/myapp/login_helper.rb

include Warden::Test::Helpers    
Warden.test_mode!

そして、rspec_helper.rb に Warden を設定しました。

config.after(:each) { Warden.test_reset! }

出力は次のとおりです。

http://myapp.example.com/admin/cron_jobs
F

Failures:

  1) Crawler UpdateMainMenus should work
     Failure/Error: current_url.should == admin_cron_jobs_url(subdomain: "myapp")
       expected: "http://myapp.example.com/admin/cron_jobs"
            got: "http://myapp.example.com/admins/sign_in" (using ==)
     # ./spec/requests/myapp/crawler_spec.rb:30:in `block (3 levels) in <top (required)>'

Finished in 5.44 seconds
1 example, 1 failure

どんな助けでも大歓迎です..本当にありがとう

4

2 に答える 2

1

あ、わかった!

管理者はログインしました。しかし、2回目の「訪問」では、ログインしませんでした。

その理由は、session_storeが正しく設定されていないため、リクエスト間でセッションを維持できないためです。

原点設定は次のとおりです。

if not Rails.env.production?
  MyApp::Application.config.session_store :cookie_store,
                                         key: '_myapp_session',
                                         domain: '.lvh.me'
end

作業バージョン(本番設定は無視してください):

if Rails.env.development?
  MyApp::Application.config.session_store :cookie_store,
                                         key: '_myapp_session',
                                         domain: '.lvh.me'
elsif Rails.env.test?
  MyApp::Application.config.session_store :cookie_store,
                                         key: '_myapp_session',
                                         domain: :all
end
于 2012-06-21T13:34:58.670 に答える
0

ログインに失敗しただけでしょうか?

于 2012-06-21T10:01:39.647 に答える