如何摆脱 let using before

How to get rid of let using before

我想摆脱 let! - 为此,我想将其移至 before 方法(必须先创建它)。

describe AdminPanelLogRemoverWorker do
  include_context 'with admin_user form'

  subject(:delete_worker) { described_class.new.perform }

  let!(:admin_panel_log1) do
    create :admin_panel_log,
           new_data: admin_user_form,
           created_at: created_at
  end
  let!(:admin_panel_log2) do
    create :admin_panel_log,
           new_data: admin_user_form,
           created_at: 2.days.ago
  end
  let(:created_at) { 2.years.ago }

  context 'when admin log is outdated' do
    it 'delete only outdated data' do
      expect { delete_worker }.to change(AdminPanelLog, :count).by(-1)
    end
  end

我想做这样的事情

  before { admin_panel_log1 }
  before { admin_panel_log2 }

但是如何一行完成?

您可能希望将代码更改为:

describe AdminPanelLogRemoverWorker do
  include_context 'with admin_user form'

  subject(:delete_worker) { described_class.new.perform }

  let(:admin_panel_log1) {
    create :admin_panel_log, new_data: admin_user_form, created_at: 2.years.ago
  }
  let(:admin_panel_log2) {
    create :admin_panel_log, new_data: admin_user_form, created_at: 2.days.ago
  }

  before do
    admin_panel_log1
    admin_panel_log2
  end

  context 'when admin log is outdated' do
    it 'delete only outdated data' do
      expect { delete_worker }.to change(AdminPanelLog, :count).by(-1)
    end
  end
end