我的model
中有一个方法,它返回我转换为json的object
。
got: "{\"@type\":\"accountResource\",\"createdAt\":\"2014-08-07T14:31:58\",\"createdBy\":2,\"updatedAt\":\"2014-08-07T14:31:58\",\"updatedBy\":2,\"accountid\":2055,\"name\":\"Test\",\"description\":\"Something about Test\",\"disabled\":false}"
如何将attributes
单独与我的stub
进行比较。
以下是我的规格
it "can create an account" do
acc = FactoryGirl.create(:account, name: "Test",
description: "Something about Test");
create_account = Account.create(account: acc)
expect(create_account.to_json).to eq(what)
end
我需要与我的本地json
进行比较,从API
返回的json与本地的attributes
相同。我不想检查值,仅针对attributes
是否相同。
答案 0 :(得分:3)
我没有看到任何要求。我想,你想要的是这样的:
it "can create an account" do
attrs = Factory.attributes_for(:account)
account = Factory.create(:account, attrs) # instead of this you should do you request
expect(JSON.parse(account.to_json)).to eq(attrs)
end
如果请求期望将是下一个:
expect(JSON.parse(response.body)).to eq(attrs)
如果你想跳过像created_at这样的属性,你需要一个像这样的自定义匹配器:
RSpec::Matchers.define :eq_attributes do |sample|
match do |actual|
sample.reject { |k, _| %w(id updated_at created_at).include? k }.all? { |k, v| actual[k] == v }
end
end
它会跳过id
,updated_at
,created_at
。随之而来的是下一个:
expect(JSON.parse(response.body)).to eq_attributes(attrs)