Rspec将params发送给主题

时间:2016-02-16 08:56:50

标签: ruby-on-rails ruby rspec

我写了一个小服务,需要参数:[:search][:area], [:search][:floor]等。 我写测试:

subject { AwesomeService.new(params) }
let(:params) do
  {
    "search" => {
      'area' => object1.area,
      'floor' => object1.floor
    }
  }
end

但是我的测试失败了(手动完美)。当我在测试模式下调试我的服务时,params[:search][:floor]NULL。如何在测试中修复我的参数?

1 个答案:

答案 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