Generalmente utilizo Factory Girl y Shoulda para testear aplicaciones rails. El primero os lo recomiendo y sobre Shoulda, aunque siempre me da algún que otro dolor de cabeza, también me da muchas satisfacciones.
Hoy me encontraba en la tesitura de testear que un atributo tuviera un valor único.
class Example < ActiveRecord::Base validates :name, :uniqueness => true end
Si incluimos el test correspondiente con shoulda nos da un error del tipo should require case sensitive unique value for … Para solucionarlo basta con incluir la primera línea que podéis leer en el test:
class ExampleTest < ActiveSupport::TestCase
subject { Factory(:example) }
should validate_uniqueness_of(:name)
end
should validate_uniqueness_of necesita tener un registro creado y con subject conseguimos tal objetivo. Podéis obtener más información sobre subject, que es bastante interesante, en la documentación de Shoulda.