使用 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 辅助方法时如何在参数哈希中设置值?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Rails.cache 时 Rspec 测试失败,但如果我执行 binding.pry 则通过

使用 RSpec 为带有 Rails 的 Redis 编写测试

如何为 rspec 包含/设置可见的辅助方法?

Rails:在 RSpec 测试查看编辑表单时出错

Rails - RSpec NoMethodError:未定义的方法

如何使用 RSpec 在 Rails 中测试:包含验证