我是 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
I get "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) 块的影响,这很黑客吗?
- 总体方法?
获取控制器测试/规范以正确设置区域设置的问题是一个长期存在的问题,请参阅:如何设置功能测试的语言环境 default_url_options (Rails)
从你写的来看,它看起来像get :index
默认情况下不设置区域设置,因为default_url_options
在控制器测试/规格中不起作用。尝试上面链接中提到的解决方案之一以使路由匹配。另请参阅 github 上的讨论:https://github.com/rspec/rspec-rails/issues/255
对于它的价值来说,这是补丁我目前在规范/测试中使用来将语言环境自动传递到当前语言环境的路由:
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)
您拥有的块设置,我真的建议使用上下文块来分隔案例,其中一个上下文没有使用之前的过滤器登录用户,而另一个上下文则使用之前的块登录用户。您现在的设置确实令人困惑有人试图看看发生了什么事。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)