Ruby on rails 比较两个具有未知值的哈希

Ruby on rails 比较两个具有未知值的哈希,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,使用RSpec,有没有一种方法可以比较我不知道某些值是什么的两个散列?我试过使用的实例,但似乎不起作用 在我的测试中,我使用POST请求创建了一个新的设备对象,并希望确保返回正确的JSON响应。它正在为设备创建UUID(我没有使用关系数据库),但我显然不知道该值是什么,也不在乎 post "/projects/1/devices.json", name: 'New Device' expected = {'name' => 'New Device', 'uuid' => insta

使用RSpec,有没有一种方法可以比较我不知道某些值是什么的两个散列?我试过使用的
实例,但似乎不起作用

在我的测试中,我使用POST请求创建了一个新的设备对象,并希望确保返回正确的JSON响应。它正在为设备创建UUID(我没有使用关系数据库),但我显然不知道该值是什么,也不在乎

post "/projects/1/devices.json", name: 'New Device'

expected = {'name' => 'New Device', 'uuid' => instance_of(String), 'type' => 'Device'}

JSON.parse(body).should == expected
我得到以下错误:

 1) DevicesController API adds a new device to a project
     Failure/Error: JSON.parse(body).should == expected
       expected: {"name"=>"New Device", "uuid"=>#<RSpec::Mocks::ArgumentMatchers::InstanceOf:0x5a27147d @klass=String>, "type"=>"Device"}
            got: {"name"=>"New Device", "uuid"=>"ef773465-7cec-48fd-b2a7-f1da10d1595a", "type"=>"Device"} (using ==)
       Diff:
       @@ -1,4 +1,4 @@
        "name" => "New Device",
        "type" => "Device",
       -"uuid" => #<RSpec::Mocks::ArgumentMatchers::InstanceOf:0x5a27147d @klass=String>
       +"uuid" => "ef773465-7cec-48fd-b2a7-f1da10d1595a"
     # ./spec/api/devices_spec.rb:37:in `(root)'
1)DeviceController API将新设备添加到项目中
失败/错误:JSON.parse(body).should==预期值
应为:{“名称”=>“新设备”,“uuid”=>#,“类型”=>“设备”}
获取:{“名称”=>“新设备”,“uuid”=>“ef773465-7cec-48fd-b2a7-f1da10d1595a”,“键入”=>“设备”}(使用==)
差异:
@@ -1,4 +1,4 @@
“名称”=>“新设备”,
“类型”=>“设备”,
-“uuid”=>#
+“uuid”=>“ef773465-7cec-48fd-b2a7-f1da10d1595a”
#./spec/api/devices_spec.rb:37:in`(root)'

的实例\u用于参数匹配:

something.should_receive(:foo).with(instance_of(String))
您可以使用
包含
,而不是使用
==
运算符。例如:

JSON.parse(body).should include('uuid', 'name' => 'New Device', 'type' => 'Device')
这表示键
uuid
必须具有任何值,并且
name
type
应具有指定值。它还允许散列中的其他键

我不知道有什么方法可以通过内置的匹配器实现您的要求