使用 RSpec 测试 Rails 辅助方法时如何在参数哈希中设置值?

Posted

技术标签:

【中文标题】使用 RSpec 测试 Rails 辅助方法时如何在参数哈希中设置值?【英文标题】:How to set a value in the params hash when testing a Rails helper method with RSpec? 【发布时间】:2015-02-01 19:07:48 【问题描述】:

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

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

spec/helpers/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

app/helpers/books_helper.rb:

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

【问题讨论】:

【参考方案1】:

在 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

【讨论】:

以上是关于使用 RSpec 测试 Rails 辅助方法时如何在参数哈希中设置值?的主要内容,如果未能解决你的问题,请参考以下文章