2012-03-03 12 views
14

Recientemente actualicé una aplicación a los rieles 3.2.2.Rail 3.2.2/Devise: advertencia de obsolescencia con rspec

estoy usando factory_girl

Factory.sequence: nombre hicimos | n | "name - # {n}" end

Factory.define: user do | u | u.first_name {Factory.next (: name)}
u.last_name {| u | 'last_' + u.first_name} u.password 'secret'
u.password_confirmation {| u | u.password} u.sequence (: correo electrónico) {| i | "user_#{i}@example.com"}

final

y esta sencilla prueba

especificar {Factory.build (: usuario) .Should be_valid}

generan la siguiente advertencia

Deprecation ADVERTENCIA: Usted está tratando de crear un atributo user_id'. Writing arbitrary attributes on a model is deprecated. Please just use attr_writer` etc. (llamada a partir del bloque (2 niveles) en en ...

¿Cómo puedo deshacerse de él?

Respuesta

4

He conocido la misma advertencia con el siguiente código:

modelo de anuncio:

class Ad < ActiveRecord::Base 
    belongs_to :user 
end 

fábricas:

FactoryGirl.define do 
    factory :ad do 
     association :user 
    end 
end 

FactoryGirl.define do 
    factory :user do 
     first_name {Factory.next(:first_name)} 
     last_name {Factory.next(:last_name)} 
     email {|x| "#{x.first_name}.#{x.last_name}#{Factory.next(:count)}@test.com"} 
     password Forgery(:basic).password 
     confirmed_at Date.today << 10 
    end 
end 

prueba

require 'spec_helper' 

describe Ad do 
    before(:each) do 
     @ad = Factory.build(:ad) 
    end 

    "it is not valid without a user" 
end 

Ejecución de la prueba me dio un similar error.

Adición

attr_accessor :user 

al modelo publicitario fijo la advertencia.

Espero que ayude.

+0

No funcionó para mí. alguna otra idea? – Alpha

+0

funcionó para mí sin Devise. Gracias, me estaba volviendo loco. – IAmNaN

19

Probablemente sea porque no ha preparado/migrado su base de datos de prueba con definiciones de columnas actualizadas, por lo que cree que está intentando establecer arbitrariamente el atributo.

Ejecute rake db:test:prepare para asegurarse de que esté actualizado.

Here's the source code de ese método, donde puede ver los rieles comprueba primero la columna o el atributo, y luego advierte si no se encuentran.

+0

desafortunadamente no es el problema. mi prueba db está actualizada. He ejecutado la tarea de preparación y todavía tengo la misma advertencia – Alpha

+1

Lamento escuchar eso. A veces tengo que ejecutar 'RAILS_ENV = test rake db: migrate' para realmente migrarlo. Solo una idea, revise la prueba real db para asegurarse de que las columnas estén presentes. – trisweb

0

tuve esta misma advertencia al hacer pruebas en Rspec y mi problema era que tenía un modelo de Padres y el modelo de Niños, donde accidentalmente tenía esto:

class Child < ActiveRecord::Base 
    belongs_to :parent 
end 

...... 

class Parent < ActiveRecord::Base 
    belongs_to :child 
end