Но я удвоил продолжительность своих тестов, и все упражнение показалось мне совершенно бессмысленным, потому что я больше не тестирую свой код, я просто тестирую свои тесты.
Это ключ прямо здесь. Тесты, которые не проверяют ваш код, бесполезны. Если вы можете отрицательно изменить код, который должны тестировать ваши тесты, и тесты не пройдут успешно, их не стоит иметь.
Как правило, я не люблю что-либо издеваться / заглушки, если не обязан. Например, когда я пишу тест контроллера, и я хочу убедиться, что соответствующее действие происходит, когда запись не удается сохранить, я считаю, что метод save
объекта заглушки для возврата false, а не тщательная обработка параметры, чтобы убедиться, что модель не может быть сохранена.
Другим примером является помощник по имени admin?
, который просто возвращает истину или ложь в зависимости от того, является ли текущий вошедший в систему пользователь администратором или нет. Я не хотел подделывать логин пользователя, поэтому я сделал это:
# helper
def admin?
unless current_user.nil?
return current_user.is_admin?
else
return false
end
end
# spec
describe "#admin?" do
it "should return false if no user is logged in" do
stubs(:current_user).returns(nil)
admin?.should be_false
end
it "should return false if the current user is not an admin" do
stubs(:current_user).returns(mock(:is_admin? => false))
admin?.should be_false
end
it "should return true if the current user is an admin" do
stubs(:current_user).returns(mock(:is_admin? => true))
admin?.should be_true
end
end
В качестве среднего уровня вы можете захотеть заглянуть в Следует . Таким образом, вы можете просто убедиться, что ваши модели имеют ассоциацию , определенную , и верить, что Rails достаточно хорошо протестирован, чтобы ассоциация «просто работала» без необходимости создавать связанную модель и затем считать ее.
У меня есть модель под названием Member
, с которой в основном все в моем приложении связано. Определено 10 ассоциаций. Я мог бы проверить каждую из этих ассоциаций, или я мог бы просто сделать это:
it { should have_many(:achievements).through(:completed_achievements) }
it { should have_many(:attendees).dependent(:destroy) }
it { should have_many(:completed_achievements).dependent(:destroy) }
it { should have_many(:loots).dependent(:nullify) }
it { should have_one(:last_loot) }
it { should have_many(:punishments).dependent(:destroy) }
it { should have_many(:raids).through(:attendees) }
it { should belong_to(:rank) }
it { should belong_to(:user) }
it { should have_many(:wishlists).dependent(:destroy) }