4

私は Omniauth テストモードをオンにしています:

spec_helper (ファイルの一番下の の直前に置きましたend):

#Turn on "test mode" for OmniAuth 
OmniAuth.config.test_mode = true

これは私のテストです:

スペック/リクエスト/authorization_pages_spec.rb:

 describe "signin" do
    before { visit signin_path }
    .
    .
    .
    describe "with OmniAuth" do
      before do
        OmniAuth.config.add_mock :facebook, uid: "fb-12345", info: { name: "Bob Smith" }
        visit root_path
      end

      describe "Facebook provider" do
        before do
          request.env["omniauth.auth"] = OmniAuth.config.mock_auth[:facebook]
          click_link "Sign in with Facebook"
        end

        it { should have_selector('title', text: user.name) }

        it { should have_link('Users',    href: users_path) }
        it { should have_link('Profile',  href: user_path(user)) }
        it { should have_link('Settings', href: edit_user_path(user)) }
        it { should have_link('Sign out', href: signout_path) }

        it { should_not have_link('Sign in', href: signin_path) }
      end

テストを実行すると、次のようになります。

失敗:

  1) Authentication signin with OmniAuth Facebook provider 
     Failure/Error: request.env["omniauth.auth"] = OmniAuth.config.mock_auth[:facebook]
     NoMethodError:
       undefined method `env' for nil:NilClass
     # ./spec/requests/authentication_pages_spec.rb:57:in `block (5 levels) in <top (required)>'

(等)。

何か足りないものがありますか、それとも何か間違っていますか?

4

1 に答える 1

2

この例では、2 つの異なるものを混ぜ合わせていると思います。統合仕様を作成しようとしていますが、requestAFAIK メソッドはコントローラーの仕様 (spec/controllersディレクトリ内の仕様) でのみ使用できます。したがって、undefined methodenv' for nil:NilClass` エラーがあります。

私のサンプル プロジェクトで健全な OmniAuth 統合仕様を見つけることができます: https://github.com/lucassus/locomotive/blob/9cd7dfd365469fc70fc367f29705a56df9730f6f/spec/features/user_facebook_sign_in_spec.rb

お役に立てば幸いです。

于 2013-08-21T15:25:04.897 に答える