Как обновить рельсы rspec атрибут nasted let - PullRequest
0 голосов
/ 23 мая 2019

Я хочу изменить атрибут внутри ранее определенного 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 в :json_serialized_offers (как вы видите выше).

Я пытался объявить это еще раз, в правильном контексте,

context "when status 'closed' passed " do
            let(:json_serialized_offers) do
              {
                'data' => second_data { status: 'expire' }
              }
            end
            # some logic
          end

Но ничего не изменилось, возможно ли это сделать?

1 Ответ

2 голосов
/ 24 мая 2019

Просто используйте другое «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

Затем в контексте, где вам необходимо его изменить, просто переопределите: status.

context "when status 'closed' passed " do
  let(:status) { 'expired' }
  it ...
end

Это переопределит: status в этом контексте, а также изменит атрибут status в: second_data.

Эта стратегия отлично подходит для установки глубоко вложенных атрибутов, и она также позволяет переопределять только те вещи, которые изменились.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...