Многие ситуации - это вопрос стиля, и разработчик не полностью осознает основные функции RSpec, и часто люди просто не имеют смысла.Люди не являются машинами, и, особенно под давлением времени, разработчики делают вещи, которые они не делают в идеальных условиях:).
Но оба представленных случая не являются строго одинаковыми.Например, если вы используете subject
, он оценивается в хуке before
до инициализации let!
, а не внутри it
.Я не проверял, но я полагаю, что эти случаи должны показать различия:
let!(:car) { create(:car) }
let(:driver) { create(:driver) }
subject { driver.car() }
it { expect(subject).to eq car } # Fail:
Это заставляет car
быть созданным ранее и доступным для subject
:
let(:driver) { create(:driver) }
subject { driver.car() }
before { create(:car) }
it { expect(subject).to eq car } # Success