使用 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 编写测试