我有一节课:
class ApiParser
def initialize
..
end
def api_data
# returns an array of hashes like so:
# [{ answer: "yes", name: "steve b" age: 22, hometown: "chicago", ... },
# { answer:"unsure", name: "tom z", age: 44, hometown: "baltimore" , ... },
# { answer: "no", name: "the brah", age: nil, hometown: "SF", ... },
# { ... }, { ... }, ... ]
end
end
Run Code Online (Sandbox Code Playgroud)
该方法返回一个哈希数组.数组的长度为50个元素.
每个哈希都具有完全相同的密钥.大约有20把钥匙.
我不确定什么是单元测试这种方法的最佳方法.如何确定该方法确实返回一个数组,每个哈希具有这些键?一些哈希值可能是零,所以我不认为我会测试这些值.
在我的一个控制器中,我有这条线:
params.require(:ad).permit(permitted_array)
Run Code Online (Sandbox Code Playgroud)
params[:ad]哈希.当此哈希中存在允许的密钥时,此行正常工作.如果params[:ad]是空哈希,则上述行失败.
示例:对于params被
{"ad"=>{}, "controller"=>"ads", "action"=>"create"}
Run Code Online (Sandbox Code Playgroud)
params.require(:ad)调用后我收到此错误:
ActionController::ParameterMissing:
param is missing or the value is empty: advertiser
Run Code Online (Sandbox Code Playgroud)
但这很好用:
[2] pry()> params
=> {"ad"=>{"name"=>"kjj", "ad_type_id"=>1, "fee"=>"9", "click_attr"=>"8", "imp_attr"=>"7"}, "controller"=>"ads", "action"=>"create"}
[3] pry()> params.require(:ad).permit(permitted_array)
=> {"name"=>"kjj", "ad_type_id"=>1, "fee"=>"9", "click_attr"=>"8", "imp_attr"=>"7"}
Run Code Online (Sandbox Code Playgroud)
如何让这一行接受空哈希?
假设我已经按照以下方式定义了 Ruby 类:
class Blah
def self.ref_class
::Other::Thing
end
end
Run Code Online (Sandbox Code Playgroud)
.ref_class返回一个类引用(这就是它的名字,对吧?)。如何使用 RSpec 测试此方法?