Я начал свой путь с TDD в Rails и столкнулся с небольшой проблемой, касающейся тестов для проверки моделей, которую я никак не могу решить. Допустим, у меня есть модель User,
class User < ActiveRecord::Base
validates :username, :presence => true
end
и простой тест
it "should require a username" do
User.new(:username => "").should_not be_valid
end
Он правильно проверяет валидацию присутствия, но что если я хочу быть более конкретным? Например, тестирование full_messages на объекте ошибок...
it "should require a username" do
user = User.create(:username => "")
user.errors[:username].should ~= /can't be blank/
end
Меня беспокоит то, что RSpec не выдает описательного сообщения об ошибке при первой попытке (используя should_not be_valid). Оно просто говорит: "Ожидалось, что valid? вернет false, получило true". Однако второй тестовый пример имеет небольшой недостаток: он использует метод create вместо метода new, чтобы получить объект ошибок.
Я бы хотел, чтобы мои тесты были более конкретными в отношении того, что они проверяют, но в то же время не должны были касаться базы данных.
У кого-нибудь есть идеи?