【问题标题】:Stubbing Warden on Controller Tests对控制器测试进行 Stubbing Warden
【发布时间】:2012-03-04 21:28:02
【问题描述】:

我在测试控制器和使用 Warden 时遇到问题。

所有示例都指向存根 request.env['warden']。当我调用 env['warden'] 时,这会导致我的控制器出现问题,然后返回 nil

举个粗略的例子,使用这个:

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

还有一个像这样的简单前置过滤器:

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

我收到了nil

我只是设法使用controller.env['warden'] = ... 让它工作,它工作。 这是有道理的,因为它位于控制器级别,所以我想我的问题是在我见过的所有示例中它不起作用。

我的spec_helper 中有这个:

config.include Warden::Test::Helpers

任何帮助都会很棒!

【问题讨论】:

    标签: ruby-on-rails rspec stubbing warden


    【解决方案1】:

    尽管有很多示例告诉您在 Rails 应用程序中通过 env['warden'] 实现 Warden。通过request.env['warden'] 访问它似乎是正确的方法。

    它通过在测试期间在我的控制器中提升 env 发现了这一点,并且总是出现 nil

    似乎在 Warden,https://github.com/hassox/warden/blob/master/lib/warden/proxy.rb#L13 机架环境有一个访问器,由于控制器测试中没有机架,因此在测试模式下将不存在该访问器。 请有人检查一下。

    因此,当在 RSpec 中存根 request.env 时,您的实现需要指向 request.env

    在我看来,这似乎是一种必要的邪恶。但如果有人有很好的解释或解决方法,我很乐意继续讨论。

    【讨论】:

      【解决方案2】:

      我为 Warden 编写了控制器测试助手。

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

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      • 2012-04-24
      • 2017-04-26
      • 2018-09-19
      • 2015-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多