rails example ruby-on-rails-3 rspec2 factory-bot

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