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

Ruby on rails 在rails中测试控制器助手重定向,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,我正试图在助手模块上编写rspec单元测试 我有SessionController和SessionHelper 我有一个助手 我想做一个类似这样的测试: describe "redirect_back_or(default)" do describe "with stored location" do before do helper.request.path = users_path helper.store_location end it

我正试图在助手模块上编写rspec单元测试

我有SessionController和SessionHelper

我有一个助手

我想做一个类似这样的测试:

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)>'

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

问题是rails助手并不适合您想要实现的功能

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

您正在实现的功能类型在控制器级别。rails中的好地方应该是将它放在ApplicationController或app/controllers/concerns中的文件中,就像它们现在很时髦一样

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

谢谢!我用这本指南寻求帮助。我想它有点过时了。我还确认了您的声明,即应用程序/助手用于查看。我以为他们在控制器级别。我将把这些方法移到一个更合适的地方。我确实放入了ApplicationController,所有的控制器都从中继承。
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)>'