ruby on rails 3 - example - FactoryGirl+RSpec+Rails 3 ''método no definido<attribute>=''
rails selenium (2)
¿Qué hay de ejecutar esto?
rake db:test:load
[Si agregó un nuevo atributo, tendría que migrarlo a la base de datos de prueba.]
Soy bastante nuevo en Rails y TDD (como sin duda será obvio en mi publicación) y me está costando envolver mi cerebro con Rspec y FactoryGirl.
Estoy usando Rails 3, rspec y factory girl:
gem ''rails'', ''3.0.3''
# ...
gem ''rspec-rails'', ''~>2.4.0''
gem ''factory_girl_rails''
Tengo un modelo de usuario en el que he estado ejecutando con éxito las pruebas durante el desarrollo, pero luego necesitaba agregar un atributo, llamado "fuente". Es para determinar de dónde vino originalmente el registro de usuario (local vs LDAP).
En mi archivo factories.rb, tengo varias fábricas definidas, que se parecen a las siguientes:
# An alumnus account tied to LDAP
Factory.define :alumnus, :class => User do |f|
f.first_name "Mickey"
f.last_name "Mouse"
f.username "mickeymouse"
f.password "strongpassword"
f.source "directory"
end
Tengo una macro definida (que ha estado trabajando hasta ahora) que tiene este aspecto:
def login(user)
before(:each) do
sign_out :user
sign_in Factory.create(user)
end
end
Lo estoy llamando en múltiples especificaciones como así (ejemplo de users_controller_spec.rb):
describe "for non-admins or managers" do
login(:alumnus)
it "should deny access" do
get :index
response.should redirect_to(destroy_user_session_path)
end
end
Si no especifico el atributo "fuente", todo funciona bien, pero tan pronto como lo hago, aparece un error similar al ejecutar la prueba
12) UsersController for non-admins or managers should deny access
Failure/Error: Unable to find matching line from backtrace
NoMethodError:
undefined method `source='' for #<User:0x00000100e256c0>
Puedo acceder al atributo sin problemas desde la consola de Rails y la aplicación en sí, y aparece en mi attr_accessible en el modelo del usuario. Es casi como si Rspec estuviera viendo una versión anterior de mi modelo y no reconociera que le había agregado un atributo. Pero si pongo la siguiente línea en mi modelo de usuario, el error desaparece
attr_accessor :source
... lo que me indica que en realidad está mirando el modelo correcto.
¡Ayuda!
Si no usa schema.rb (por ejemplo, ha configurado config.active_record.schema_format = :sql
) debe ejecutar
rake db:test:prepare