mr_*_*cle 3 rspec ruby-on-rails
我想更改先前定义的属性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
Run Code Online (Sandbox Code Playgroud)
最后这些let被合并为一个
let(:json_serialized_offers) do
{
'data' => [first_data, second_data, third_data],
'included' => first_included + second_included + third_included
}
end
Run Code Online (Sandbox Code Playgroud)
现在我想将状态更改为expiredin second_datawhich is 嵌套在datain部分:json_serialized_offers(如上所示)。
我试图在正确的背景下再次澄清它,通过
context "when status 'closed' passed " do
let(:json_serialized_offers) do
{
'data' => second_data { status: 'expire' }
}
end
# some logic
end
Run Code Online (Sandbox Code Playgroud)
但什么都没有改变,可以这样做吗?
只需使用另一个“let”来设置状态属性即可。
创建一个新的 :status 变量let并更改您的第一个变量,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
Run Code Online (Sandbox Code Playgroud)
然后,在需要更改它的上下文中,只需重新定义 :status 即可。
context "when status 'closed' passed " do
let(:status) { 'expired' }
it ...
end
Run Code Online (Sandbox Code Playgroud)
这将在此上下文中重新定义 :status,并且还将更改 :second_data 中的状态属性。
此策略非常适合设置深度嵌套的属性,并且还使您只需重新定义已更改的内容即可。
| 归档时间: |
|
| 查看次数: |
2431 次 |
| 最近记录: |