Stubbing Warden on Controller Tests

删除回忆录丶 提交于 2019-12-19 08:33:07

问题


I'm having an issue with testing my controllers and using Warden.

All examples point at stubbing request.env['warden']. This causes issues in my controllers when I call env['warden'], which then returns nil.

For a crude example, using this:

request.env['warden'] = double(Warden, :authenticate => nil,
                                          :authenticate! => nil,
                                          :authenticated? => false)

And a simple before filter like this:

before_filter do
  redirect_to new_user_session_url unless env['warden'].authenticated?
end

I get a nil.

I just managed to get it working using controller.env['warden'] = ... and it works. This makes sense, since it's sitting right at the controller level, so I guess my question is what wouldn't it work in the I've seen all examples.

I have this in my spec_helper:

config.include Warden::Test::Helpers

Any help would be great!


回答1:


I wrote controller test helpers for Warden.

http://kentaroimai.com/articles/1-controller-test-helpers-for-warden




回答2:


Despite many examples telling you to implement Warden through env['warden'] in your Rails app. It seems the correct way to access it through request.env['warden'].

It found this out by raising env in my controllers during tests, and this always came out nil.

It seems in Warden, https://github.com/hassox/warden/blob/master/lib/warden/proxy.rb#L13 There is an accessor for the rack environment, which won't exist in test mode due to the absence of Rack in controller tests. Please someone check this.

So when stubbing request.env in RSpec, your implementation needs to point at request.env.

It seems a necessary evil in my mind. But if there is anyone with a good explanation or work around, I'd love to continue this discussion.



来源:https://stackoverflow.com/questions/9261191/stubbing-warden-on-controller-tests

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!