如何更新 rails rspec nasted let 属性
How to update rails rspec nasted let attribute
我想更改先前定义的 let
中的属性以使我的测试有效。我知道它是哈希中的哈希,但我的解决方案 none 有效。
我有几个类似的 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
现在我想将状态更改为 second_data
中的 expired
,它嵌套在 :json_serialized_offers
中的 data
部分(如上所示)。
我试图在正确的上下文中通过
再次取消它
context "when status 'closed' passed " do
let(:json_serialized_offers) do
{
'data' => second_data { status: 'expire' }
}
end
# some logic
end
但是没有任何改变,是否可以这样做?
只需使用另一个 "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.
中的状态属性
这个策略非常适合设置深层嵌套的属性,而且它还使得 您只需重新定义更改的内容。
我想更改先前定义的 let
中的属性以使我的测试有效。我知道它是哈希中的哈希,但我的解决方案 none 有效。
我有几个类似的 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
现在我想将状态更改为 second_data
中的 expired
,它嵌套在 :json_serialized_offers
中的 data
部分(如上所示)。
我试图在正确的上下文中通过
再次取消它context "when status 'closed' passed " do
let(:json_serialized_offers) do
{
'data' => second_data { status: 'expire' }
}
end
# some logic
end
但是没有任何改变,是否可以这样做?
只需使用另一个 "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.
中的状态属性这个策略非常适合设置深层嵌套的属性,而且它还使得 您只需重新定义更改的内容。