2012-03-03 2 views
14

Недавно я обновил приложение до рельсов 3.2.2.Rail 3.2.2/Devise: предупреждение об устаревании с rspec

Я использую Factory_girl

Factory.sequence: имя делать | п | "name - # {n}" end

Factory.define: пользователь 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"}

конец

и этот простой тест

указать {Factory.build (: пользователя) .Should be_valid}

генерировать следующее предупреждение

Deprecation ВНИМАНИЕ: Вы пытаетесь создать атрибут user_id'. Writing arbitrary attributes on a model is deprecated. Please just use attr_writer` и т.п. (вызывается из блока (2 уровня) в на ...

Как я могу избавиться от него?

ответ

4

Я встретил такое же предупреждение со следующим кодом:

модель объявления:

class Ad < ActiveRecord::Base 
    belongs_to :user 
end 

Фабрики:

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 

Тестовые

require 'spec_helper' 

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

    "it is not valid without a user" 
end 

Запуск теста дал мне аналогичную ошибка.

Добавление

attr_accessor :user 

модели Ad исправили предупреждение.

Надеюсь, это поможет.

+0

Это не работает для меня. любая другая идея? – Alpha

+0

Работал для меня без разработки. Спасибо, это сводило меня с ума. – IAmNaN

19

Возможно, это связано с тем, что вы не подготовили/не перенесли тестовую базу данных с обновленными определениями столбцов, поэтому она думает, что вы пытаетесь произвольно установить атрибут.

Запустить rake db:test:prepare, чтобы убедиться, что оно обновлено.

Here's the source code этого метода, где вы можете видеть, что Rails проверяет сначала столбец или атрибут, а затем предупреждает, если они не найдены.

+0

К сожалению, это не проблема. мой тест db обновлен. Я запустил задачу подготовки, и у меня все еще есть такое же предупреждение. – Alpha

+1

Извините, что слышу это. Иногда мне приходится запускать 'RAILS_ENV = test rake db: migrate', чтобы реально перенести его. Просто подумайте, проверьте фактический тест db, чтобы убедиться, что столбцы присутствуют. – trisweb

0

У меня была эта же предупреждение при выполнении тестов в Rspec и моя проблема в том, что у меня была модель Родитель и модель ребенка, где я случайно имел это:

class Child < ActiveRecord::Base 
    belongs_to :parent 
end 

...... 

class Parent < ActiveRecord::Base 
    belongs_to :child 
end 
Смежные вопросы