我想更改先前定义的let
中的属性以使测试有效。我知道它是哈希中的哈希,但是我的解决方案都不起作用。
我有几个类似的let
,但看起来像这样
let(:second_data) do
{
'id' => second.id.to_s,
'type' => 'account',
'attributes' =>
{
'status' => 'new',
'created_at' => second.created_at.as_json,
'time_information' => second.credit.process.date_of_interest.as_json
}
}
end
最后,这些租赁被合并为一个
let(:json_serialized_offers) do
{
'data' => [first_data, second_data, third_data],
'included' => first_included + second_included + third_included
}
end
现在,我想将expired
中的状态更改为second_data
,该状态嵌套在data
的{{1}}部分中(如上所示)。
我正试图在适当的情况下再次通过
:json_serialized_offers
但是什么都没有改变,有可能这样做吗?
答案 0 :(得分:2)
只需使用另一个“ let”来设置状态属性即可。
使用新的let
创建一个:status变量,并像这样更改您的第一个let
:
let(:status) { 'new' } # <==== new let
let(:second_data) do
{
'id' => second.id.to_s,
'type' => 'account',
'attributes' =>
{
'status' => status # <==== set status using new variable
'created_at' => second.created_at.as_json,
'time_information' => second.credit.process.date_of_interest.as_json
}
}
end
然后,在需要更改它的上下文中,只需重新定义:status。
context "when status 'closed' passed " do
let(:status) { 'expired' }
it ...
end
这将在此上下文中重新定义:status,还将更改:second_data中的status属性。
此策略非常适合设置深层嵌套的属性,它还使您只需重新定义发生变化的事物即可。