在rails中测试控制器助手重定向

use*_*833 2 ruby rspec ruby-on-rails

我试图在辅助模块上编写一个rspec单元测试

我有SessionsControllerSessionsHelper

里面SessionsHelper我有

def redirect_back_or(default)
  redirect_to(session[:return_to] || default)
  session.delete(:return_to)
end
Run Code Online (Sandbox Code Playgroud)

我想做一个看起来像这样的测试:

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
Run Code Online (Sandbox Code Playgroud)

但我在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)>'
Run Code Online (Sandbox Code Playgroud)

pho*_*oet 5

这里没有直接解决您的问题.

问题是rails帮助程序不适合您想要实现的功能.

文件app/helpers用于VIEW帮助程序.因此,您将在模板中使用或用于渲染的方法.

您正在实现的功能类型在控制器级别上.铁轨中的好地方就是将它放入ApplicationController或放入文件中app/controllers/concerns,就好像它们现在的时髦和时尚一样.

然后,您可以通过请求或控制器规范对其进行测试.