Rail 3.2.2/Devise:rspec的弃用警告

Alp*_*pha 14 rspec ruby-on-rails-3 factory-bot

我最近将应用程序升级到rails 3.2.2.

我正在使用Factory_girl

Factory.sequence:name do | n | "名字 - #{n}"结束

Factory.define:用户执行| 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(:user).should be_valid}

生成以下警告

弃用警告:您正在尝试创建属性user_id'. Writing arbitrary attributes on a model is deprecated. Please just use attr_writer`等(从块中调用(2级)...

我怎么能摆脱它?

tri*_*web 19

这可能是因为您没有使用更新的列定义准备/迁移测试数据库,因此它认为您正在尝试任意设置属性.

运行rake db:test:prepare以确保它已更新.

这是该方法的源代码,您可以在其中首先看到Rails检查列或属性,然后警告它们是否找不到.


Cri*_*scu 4

我在以下代码中遇到了相同的警告:

广告模型:

class Ad < ActiveRecord::Base
    belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)

工厂:

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
Run Code Online (Sandbox Code Playgroud)

测试

require 'spec_helper'

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

    "it is not valid without a user"
end
Run Code Online (Sandbox Code Playgroud)

运行测试给了我类似的错误。

添加

attr_accessor :user
Run Code Online (Sandbox Code Playgroud)

广告模型修复了警告。

我希望它有帮助。