Rails 3.1, RSpec: testando validações de modelo
Comecei minha jornada com o TDD no Rails e me deparei com um pequeno problema relacionado a testes de validação de modelos para os quais não consigo encontrar uma solução. Digamos que eu tenho um modelo de usuário,
class User < ActiveRecord::Base
validates :username, :presence => true
end
e um teste simples
it "should require a username" do
User.new(:username => "").should_not be_valid
end
Isto testa corretamente a validação de presença, mas e se eu quiser ser mais específico? Por exemplo, testando mensagens_ completas no objeto de erros.
it "should require a username" do
user = User.create(:username => "")
user.errors[:username].should ~= /can't be blank/
end
Minha preocupação com a tentativa inicial (usando should_not be_valid) é que o RSpec não produzirá uma mensagem de erro descritiva. Simplesmente diz "esperado válido? Retornar falso, se tornou verdadeiro". No entanto, o segundo exemplo de teste tem uma pequena desvantagem: ele usa o método create em vez do novo método para obter o objeto de erro
Gostaria que meus testes fossem mais específicos sobre o que estão testando, mas, ao mesmo tempo, não precisam tocar em um banco de dado
Alguém tem alguma entrada?