14 Stimmen

Rail 3.2.2/Devise: Veralterungswarnung mit rspec

Ich habe kürzlich eine Anwendung auf Rails 3.2.2 aktualisiert.

Ich benutze Factory_girl

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

Ende

und dieser einfache Test

angeben { Factory.build(:user).should be_valid }

die folgende Warnung ausgeben

DEPRECATION WARNING: Sie versuchen, ein Attribut zu erstellen user_id'. Writing arbitrary attributes on a model is deprecated. Please just use attr_writer` usw. (aufgerufen vom Block (2 Ebenen) in at...

Wie kann ich sie loswerden?

19voto

trisweb Punkte 8454

Das liegt wahrscheinlich daran, dass Sie Ihre Testdatenbank nicht mit aktualisierten Spaltendefinitionen vorbereitet bzw. migriert haben, so dass das Programm denkt, dass Sie versuchen, das Attribut willkürlich zu setzen.

ausführen. rake db:test:prepare um sicherzugehen, dass sie auf dem neuesten Stand ist.

Hier ist der Quellcode dieser Methode, wo Sie sehen können, dass Rails zuerst nach der Spalte oder dem Attribut sucht und dann warnt, wenn sie nicht gefunden werden.

4voto

Die gleiche Warnung habe ich mit dem folgenden Code erhalten:

Anzeigenmodell:

class Ad < ActiveRecord::Base
    belongs_to :user
end

Fabriken:

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

Test

require 'spec_helper'

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

    "it is not valid without a user"
end

Bei der Durchführung des Tests erhielt ich eine ähnliche Fehlermeldung.

Hinzufügen von

attr_accessor :user

zum Anzeigenmodell hat die Warnung behoben.

Ich hoffe, es hilft.

0voto

you786 Punkte 3640

Ich hatte die gleiche Warnung, während ich Tests in Rspec durchführte, und mein Problem war, dass ich ein Parent-Modell und ein Child-Modell hatte, bei denen ich versehentlich dies hatte:

class Child < ActiveRecord::Base
  belongs_to :parent
end

......

class Parent < ActiveRecord::Base
  belongs_to :child
end

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X