Soy bastante nuevo en los rieles y TDD (como sin duda será obvio por mi publicación) y estoy teniendo un momento difícil envolviendo mi cerebro alrededor de Rspec y FactoryGirl.FactoryGirl + RSpec + Rails 3 'método indefinido <attribute> ='
estoy usando Rails 3, rspec y la fábrica de niña:
gem 'rails', '3.0.3'
# ...
gem 'rspec-rails', '~>2.4.0'
gem 'factory_girl_rails'
Tengo un modelo de usuario que he estado funcionando con éxito pruebas en durante el desarrollo, pero luego tenía que añadir un atributo a, llamada "fuente". Es para determinar de dónde vino el registro del usuario (local vs LDAP).
En mi archivo factories.rb, he definido varias fábricas, que parecen algo así como lo siguiente:
# 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
voy a llamar a él de varias especificaciones como tal (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 se especifica el atributo "fuente", todo funciona bien, pero tan pronto como lo hago, me sale un error al igual que cuando se ejecuta 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 tener acceso al atributo ningún problema desde el Rieles de la consola y la aplicación en sí, y está en la lista de mi attr_accessible en el modelo de usuario. Es casi como si Rspec estuviera viendo una versión anterior de mi modelo y no reconociera que le he agregado un atributo. Pero si pongo la siguiente línea en mi modelo de usuario, el error desaparece
attr_accessor :source
... lo cual me indica que en realidad está mirando el modelo correcto.
¡Ayuda!
Gracias! Sí, eso es todo ... se olvidó de usar la base de datos de prueba ... – dearlbry
¡Gran ahorro! Gracias @ TK-421. Totalmente olvidé que estaba en la prueba db ... – MorningHacker
Que Dios te bendiga Señor – ant