我试图在辅助模块上编写一个rspec单元测试
我有SessionsController
和SessionsHelper
在SessionsHelper
里面我有
def redirect_back_or(default)
redirect_to(session[:return_to] || default)
session.delete(:return_to)
end
我想做一个看起来像这样的测试:
describe "redirect_back_or(default)" do
describe "with stored location" do
before do
helper.request.path = users_path
helper.store_location
end
it do
expect(helper.redirect_back_or(user_path(@user))).to redirect_to(users_url)
helper.session[:return_to].should eq(nil)
end
end
end
但是我在Helper方法中得到了一个例外
undefined method `redirect_to' for #<#<Class:0x00000006fc9940>:0x00000005322620>
# ./app/helpers/sessions_helper.rb:34:in `redirect_back_or'
# ./spec/helpers/sessions_helper_spec.rb:99:in `block (4 levels) in <top (required)>'
答案 0 :(得分:5)
此处没有直接解决您的问题。
问题是rails帮助程序不适合您想要实现的功能。
app/helpers
中的文件适用于VIEW帮助程序。所以你将在模板中使用或渲染的方法。
您正在实施的功能类型在控制器级别上。 rails中的好地方就是将它放在ApplicationController
或app/controllers/concerns
中的文件中,就好像它们现在一样时髦和时髦。
然后,您可以通过请求或控制器规范对其进行测试。