Я работал над учебными пособиями на railstutorial.org , и я был немного озадачен авторским кодом для раздела - 6.2.1 Проверка наличия.
В пользовательской модели учебник добавляет validates :name, :presence => true
. Достаточно просто.
Когда автор решает написать тест rspec, он делает то, что мне показалось немного странным.
describe User do
before(:each) do
@attr = { :name => "Example User", :email => "user@example.com" }
end
.
.
.
it "should require a name" do
no_name_user = User.new(@attr.merge(:name => ""))
no_name_user.should_not be_valid
end
end
Зачем пытаться объединить пустую строку с @attr
, если можно избавиться от оператора: each block и просто написать:
it "should require a name" do
no_name_user = User.new(:name => "", :email => "user@example.com")
no_name_user.should_not be_valid
end
Я знаю, что автор использует переменную @attr
и для проверки наличия адреса электронной почты, что является одним из признаков того, почему он использовал инструкцию block - для меня более разумно следовать структуре цитата второго блока. Тем не менее, у меня есть ощущение, что я что-то упускаю здесь.
Еще одно объяснение, которое пришло мне в голову, заключается в том, что это помогает использовать структуру @attr
, когда нужно ввести много ключей, в отличие от этого довольно упрощенного случая только имени и адреса электронной почты.
У кого-нибудь есть вход?