使用rspec测试omniauth回调时设置env

时间:2011-09-03 13:12:20

标签: facebook devise omniauth

尝试通过Omniauth设置Facebook身份验证回调时,我遇到了一个奇怪的问题。在我的控制器中(简化为显示错误所需的代码)我有:

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
  def facebook
    raise env.inspect
    # auth_hash = env["omniauth.auth"]
  end
end

这适用于生产模式,向我显示哈希。但是在测试模式下,env设置为nil。

我的spec_helper.rb文件中有以下设置

OmniAuth.config.test_mode = true
OmniAuth.config.add_mock(:facebook, {"credentials" => {
                                        "token" => "foo-token"
                                        }
                                     })

我的规格如下:

require 'spec_helper'

describe Users::OmniauthCallbacksController do

  describe "Facebook" do

    before(:each) do
      request.env["devise.mapping"] = Devise.mappings[:user] 
      request.env["omniauth.auth"] = OmniAuth.config.mock_auth[:facebook]
    end

    it "should be a redirect" do
      get :facebook
      response.should redirect_to(root_path)
    end

  end

end

在运行我的测试时,有没有人可以告诉我我需要做什么才能保持不变?

1 个答案:

答案 0 :(得分:1)

我在 spec_helper.rb 中使用以下内容:

RACK_ENV = ENV['ENVIRONMENT'] ||= 'test'

我不使用Rails或设计虽然如此YMMV。我也看到过各种各样的主题,说有人必须在之前完成这个他们的要求才能让它发挥作用。