如何更新 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.

中的状态属性

这个策略非常适合设置深层嵌套的属性,而且它还使得 您只需重新定义更改的内容。