2

我正在尝试测试omniauth。我已经放入 config/environments/test.rb

OmniAuth.config.test_mode = true

在我的 spec_helper.rb

OmniAuth.config.add_mock(:facebook,
                             { :provider => 'facebook',
                               :uid => '1234567',
                               :info => { :first_name => 'Jonathan', :name=> 'Jonathan', :email => 'jon@jak.com', :image => 'http://graph.facebook.com/1234567/picture?type=square'},
                               :credentials => {
                                 :expires_at => 1351270850,
                                 :token=> 'AAADzk0b791YBAHCNhBI3n6ScmWvuXTY4yIUqXr9WiZCg1R808RYzaHxsHnrbn62IwrIgZCfSBZAVIP6ptF41nm8YtRtZCeBbxbbz1mF8RQZDZD'
                                } })

然后在我的请求控制器中:

it "testing omniauth hash" do
  visit '/auth/facebook'
  request.env["omniauth.auth"][:uid].should == '1234567'
end

并得到:

Failures:

  1) Login logins with the OmniAuth auth hash
     Failure/Error: request.env["omniauth.auth"][:uid].should == '1234567'
     NoMethodError:
       undefined method `env' for nil:NilClass
     # ./spec/requests/login_spec.rb:38:in `block (2 levels) in <top (required)>'

Finished in 2.4 seconds
9 examples, 1 failure

知道发生了什么吗?提前谢谢

编辑 1 在此处输入图像描述

4

1 回答 1

2

编辑:实际上,我重现了错误,问题似乎是请求对象没有被实例化,除非您使用 [http_verb] [url] 发出本机请求。因此,如果您使用get '/auth/facebook'而不是visit '/auth/facebook'.

于 2012-09-25T03:08:52.557 回答