Rails 3.1, RSpec: тестирование валидации моделей

Я начал свой путь с 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, чтобы получить объект ошибок.

Я бы хотел, чтобы мои тесты были более конкретными в отношении того, что они проверяют, но в то же время не должны были касаться базы данных.

У кого-нибудь есть идеи?

70
задан Feech 24 September 2011 в 04:55
поделиться