let и before

Бывает, встречаешь такое:

describe ".active" do
  let!(:active_accounts) { create_list(:active_account, 2) }
  before { create_list(:pending_account, 3) }

  it "returns only active accounts" do
    expect(described_class.active).to match_array(active_accounts)
  end
end

Сразу хочется спросить, почему часть зависимостей мы создаем в let, а часть — в before? Что за зависимости в before? Что здесь скрыто? Чаще всего ответ такой: мы не обращаемся к неактивным акаунтам в тесте, значит, и переменная не нужна — захерачим их в before.

Чтобы не ломать голову, лучше быть последовательным: использовать let для создания и указания зависимостей, а before — для приведения системы в нужное состояние:

describe ".active" do
  let!(:active_accounts) { create_list(:active_account, 2) }
  let!(:pending_accounts) { create_list(:pending_account, 3) }

  it "returns only active accounts" do
    expect(described_class.active).to match_array(active_accounts)
  end
end

P. S. Ещё больше постов о программировании, тестах и культуре разработки у меня в Телеграме.