Last active
August 25, 2016 09:47
-
-
Save maxinspace/0e5698fe61afa234f699a577f9df2aab to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# плохой пример | |
RSpec.describe Alarm do | |
describe "#snooze" do | |
subject { described_class.new(at: time) } | |
it { expect { subject.snooze }.to change { subject.at }.by(9.minutes) | |
end | |
end | |
# вариант 1 | |
# subject с именем, it развернут. | |
# есть однострочные проверки, и многострочные | |
# имеет ли смысл назначать имя для subject, чтобы тест #snooze был более понятен, | |
# чтобы мы точно знали, что мы проверяем alarm? Или имя для subject вносит еще больше путаницы? | |
RSpec.describe Alarm do | |
let(:time) { Time.zone.now + 1.day } | |
# subject имеет явное глобальное имя | |
subject(:alarm) { described_class.new(at: time) } | |
# проверяем валидацию через однострочник | |
it { is_expected.to validate_presence_of(:at) } | |
# развертываем it | |
describe "#snooze" do | |
it "pauses alarm for next 9 minutes" do | |
# subject имеет свое имя | |
expect { alarm.snooze }.to change { alarm.at }.by(9.minutes) | |
end | |
end | |
end | |
# вариант 2 | |
# subject не имеет имени, но внутри теста явно определяем alarm как subject, it развернут | |
# есть однострочные проверки, и многострочные | |
# есть ли смысл в таком переопределении, чтобы не бегать наверх, и не смотреть что такое subject, | |
# когда определяется имя для subject прямо внутри describe? | |
RSpec.describe Alarm do | |
let(:time) { Time.zone.now + 1.day } | |
subject { described_class.new(at: time) } | |
# проверяем валидацию через однострочник | |
it { is_expected.to validate_presence_of(:at) } | |
# развертываем it | |
describe "#snooze" do | |
# subject виден и описан в describe | |
let(:alarm) { subject } | |
it "pauses alarm for next 9 minutes" do | |
expect { alarm.snooze }.to change { alarm.at }.by(9.minutes) | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment