我写了一个小服务,需要参数:[:search][:area], [:search][:floor]
等。
我写测试:
subject { AwesomeService.new(params) }
let(:params) do
{
"search" => {
'area' => object1.area,
'floor' => object1.floor
}
}
end
但是我的测试失败了(手动完美)。当我在测试模式下调试我的服务时,params[:search][:floor]
为NULL
。如何在测试中修复我的参数?
答案 0 :(得分:3)
rails中的params
对象并不关心你是否在其中查找符号或字符串中的值:
params[:search][:floor] == params['search']['floor']
但是,ruby中的Hash
是不同的 - 如果您将字符串作为键插入,则需要使用字符串进行查询。
param_hash[:search][:floor] != params['search']['floor']
您将params
存根为哈希。这意味着您应该使用符号而不是字符串进行设置,或者使用HashWithIndifferentAccess
。
subject { AwesomeService.new(params) }
let(:params) do
ActiveSupport::HashWithIndifferentAccess.new {
"search" => {
'area' => object1.area,
'floor' => object1.floor
}
}
end