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)>'

(ETC)。

有什么遗漏还是我做错了什么?

4

1 回答 1

2

我认为你在这个例子中混合了两种不同的东西。您正在尝试编写集成规范,但requestAFAIK 方法仅在控制器规范中可用(用于spec/controllers目录内的规范)。因此,您有undefined methodnil:NilClass` 错误的 env'。

您可以在我的示例项目中找到健康的 OmniAuth 集成规范:https ://github.com/lucassus/locomotive/blob/9cd7dfd365469fc70fc367f29705a56df9730f6f/spec/features/user_facebook_sign_in_spec.rb

我希望它会帮助你。

于 2013-08-21T15:25:04.897 回答