2012-03-03 18 views
14

Recentemente ho aggiornato un'applicazione alle guide 3.2.2.Rail 3.2.2/Devise: avviso di deprecazione con rspec

sto usando factory_girl

Factory.sequence: nome do | n | "nome - # {n}" fine

Factory.define: utente 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 (: email) {| i | "user_#{i}@example.com"}

fine

e questo semplice test

specificare {Factory.build (: utente) .Should be_valid}

generare il seguente avviso

deprecazione ATTENZIONE: Si sta cercando di creare un attributo user_id'. Writing arbitrary attributes on a model is deprecated. Please just use attr_writer` ecc (chiamato dal blocco (2 livelli) in a ...

Come posso sbarazzarsi di esso?

risposta

4

ho incontrato lo stesso avvertimento con il seguente codice:

modello annuncio:

class Ad < ActiveRecord::Base 
    belongs_to :user 
end 

Fabbriche:

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 

prova

require 'spec_helper' 

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

    "it is not valid without a user" 
end 

l'esecuzione del test mi ha dato un simile errore.

Aggiunta

attr_accessor :user 

al modello annuncio fissata l'avvertimento.

Spero che aiuti.

+0

Non ha funzionato per me. qualche altra idea? – Alpha

+0

Ha funzionato per me senza Devise. Grazie, mi stava facendo impazzire. – IAmNaN

19

Probabilmente non hai preparato/migrato il database di test con le definizioni di colonna aggiornate, quindi pensa che stai provando a impostare arbitrariamente l'attributo.

Eseguire rake db:test:prepare per assicurarsi che sia aggiornato.

Here's the source code di tale metodo, in cui è possibile visualizzare prima i controlli Rails per la colonna o l'attributo, quindi avvisa se non vengono trovati.

+0

purtroppo non è il problema. il mio test db è aggiornato. Ho eseguito l'attività di preparazione e ho ancora lo stesso avviso – Alpha

+1

Siamo spiacenti di sentirlo. A volte devo eseguire 'RAILS_ENV = test rake db: migrate' per migrarlo effettivamente. Solo un'idea, controlla il test effettivo db per assicurarti che le colonne siano presenti. – trisweb

0

Ho avuto questo stesso avvertimento, mentre facendo le prove in Rspec e il mio problema era che avevo un modello di genitore e bambino modello dove ho avuto accidentalmente questo:

class Child < ActiveRecord::Base 
    belongs_to :parent 
end 

...... 

class Parent < ActiveRecord::Base 
    belongs_to :child 
end 
Problemi correlati