【问题标题】:Basic Devise spec with I18N带有 I18N 的基本设计规范
【发布时间】:2012-09-13 20:36:19
【问题描述】:

我是 RSpec 的新手,正在尝试编写一个简单的测试来显示 Devise 正在工作。我选择了一个随机页面并想编写一个测试来显示未登录的用户被重新重定向到 /users/sign_in。

describe OrgsController do

  describe "GET index when not logged in" do
    it "redirects to new_user_session_path" do
      user = FactoryGirl.create(:user)
      user.confirm!
      sign_in user
      sign_out user
      get :index
      response.should redirect_to new_user_session_path
    end
  end

  before(:each) do
    user = FactoryGirl.create(:user)
    user.confirm!
    sign_in user
  end

  # remaining specs

end

我收到"Expected response to be a redirect to <http://test.host/users/sign_in?locale=en> but was a redirect to <http://test.host/users/sign_in>."

我已经实现了 i18n,并且在我的应用程序控制器中有:

before_filter :set_i18n_locale_from_params

就以下方面而言,最好的方法是什么:

  • 获取要匹配的路线?
  • 为了规避 before(:each) 块的影响而再次登录和注销用户有什么不妥?
  • 整体方法?

【问题讨论】:

    标签: ruby-on-rails rspec devise


    【解决方案1】:

    让控制器测试/规范正确设置区域设置的问题是一个长期存在的问题,请参阅:How to set locale default_url_options for functional tests (Rails)

    从您所写的内容来看,get :index 似乎默认情况下没有设置语言环境,因为default_url_options 在控制器测试/规范中不起作用。尝试上面链接中提到的解决方案之一以获取匹配的路线。另请参阅 github 上的讨论:https://github.com/rspec/rspec-rails/issues/255

    对于它的价值,这是 the patch 我目前在规范/测试中使用以使语言环境自动传递给当前语言环境的路由:

    class ActionDispatch::Routing::RouteSet
      def url_for_with_locale_fix(options)
        url_for_without_locale_fix(options.merge(:locale => I18n.locale))
      end
    
      alias_method_chain :url_for, :locale_fix
    end
    

    关于你所拥有的before(:each) 块设置的骇人听闻,我真的建议使用上下文块来分隔案例,一个上下文没有 before 过滤器登录用户,另一个上下文使用 before 块登录用户. 你现在的设置对于试图查看发生了什么的人来说真的很混乱。

    【讨论】:

    • Shioyama - 效果很好!非常感谢。我将补丁放在 config/initializers 中的一个新文件中(根据stackoverflow.com/questions/3420680/monkey-patching-in-rails-3)。让我知道您是否会以不同的方式应用它。
    • 您好,很高兴它成功了!我在 spec/support/ 中为它创建了一个文件,然后从 features/support/custom_env.rb 中需要该文件,以便它也适用于黄瓜测试。但基本上你可以把它放在任何将被 rspec 加载的地方。 config/initializers 唯一的事情是这些文件也将以其他模式加载,除非您将其包装在某些条件中。我更喜欢将与测试相关的内容分开。
    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 2012-02-25
    • 2011-03-31
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多