在使用RSpec测试Rails帮助器方法时如何在params哈希中设置一个值?

时间:2014-12-04 01:53:56

标签: ruby-on-rails ruby-on-rails-4 rspec rspec-rails rspec3

在Ruby on Rails 4中,使用RSpec 3.1,如何在测试Rails辅助方法时设置params哈希的值?

我想设置params[:search] = 'my keyword search'以便在我的帮助方法中使用,然后在it示例块中调用它。

规格/助手/ books_helper_spec.rb:

require 'rails_helper'

describe BooksHelper do
  describe "#page_title_helper" do
    let(:params) { {search: 'my keyword search'} }

    it "should read the params hash" do
      expect(helper.params[:search]).to eq "my keyword search"
    end
  end
end

应用程序/助手/ books_helper.rb:

BooksHelper
  def title_helper
    if params[:search]
      "Books related to #{params[:search]}"
    else
      "All Books"
    end
  end
end

1 个答案:

答案 0 :(得分:16)

在RSpec 3中,params哈希在控制器对象上可用,它在辅助规范中可用。因此,例如,要获得params[:search],请说 controller.params[:search]

这是一个扩展的例子,从问题扩展而来。

context "with a params[:search]" do
  it "returns the search term" do
    controller.params[:search] = 'Test Search'
    expect(helper.title_helper).to eq("Books related to #{params[:search]}".html_safe)
    expect(helper.title_helper).to eq("Books related to Test Search".html_safe)
    expect(helper.title_helper).not_to eq("Books related to Bad Value".html_safe)
  end
end