【问题标题】:rspec association test failingrspec 关联测试失败
【发布时间】:2012-08-01 13:18:51
【问题描述】:

对 rspec 还是有点新,无法通过以下测试(问题区域“它“应该以正确的顺序进行正确的处理”块):

user_spec.rb

describe User do

    before do
        @user = User.new(name: "Example User", email: "user@example.com",
                        password: "foobar", password_confirmation: "foobar")
    end

    describe "treating associations" do
        before { @user.save }
        let!(:older_treating) do
            FactoryGirl.create(:treating, user: @user, created_at: 1.day.ago)
        end
        let!(:newer_treating) do
            FactoryGirl.create(:treating, user: @user, created_at: 1.hour.ago)
        end

        it "should have the right treatings in the right order" do          
            @user.sent_treatings.should == [newer_treating, older_treating]
            @user.received_treatings.should == [newer_treating, older_treating]
        end
    end

end

根据下面的用户和处理模型,我知道我需要在测试中的某个位置嵌入“请求者”和“被请求者”,并且我尝试了不同的变体,但它们都继续失败。以下是模型:

用户.rb

class User < ActiveRecord::Base
    attr_accessible :name, :email, :password, :password_confirmation
    has_secure_password

    has_many :sent_treatings, :foreign_key => "requestor_id", :class_name => "Treating"
    has_many :received_treatings, :foreign_key => "requestee_id", :class_name => "Treating"
end

治疗.rb

class Treating < ActiveRecord::Base
  attr_accessible :intro, :proposed_date, :proposed_location

  validates :requestor_id, presence: true
  validates :requestee_id, presence: true

    belongs_to :requestor, class_name: "User"
    belongs_to :requestee, class_name: "User"

    default_scope order: 'treatings.created_at DESC'

end

这是我的 factory.rb 文件:

工厂.rb

FactoryGirl.define do
    factory :user do
        sequence(:name) { |n| "Person #{n}" }
        sequence(:email) { |n| "person_#{n}@example.com"}
        password "foobar"
        password_confirmation "foobar"

        factory :admin do
            admin true
        end
    end

    factory :treating do
    intro "Lorem ipsum"
    user
  end
end

寻找适当代码背后的逻辑解释,以填写 user_spec 测试的“它“应该以正确的顺序进行正确的处理”块。谢谢!

编辑:抱歉,忘记了错误信息,这里是:

失败:

1) 用户处理关联应该以正确的顺序有正确的处理 失败/错误:FactoryGirl.create(:treating, user: @user, created_at: 1.day.ago) 无方法错误: '

中未定义的方法user=' for #<Treating:0x0000010385ec70> # ./spec/models/user_spec.rb:143:inblock(3 级)

【问题讨论】:

    标签: ruby-on-rails rspec


    【解决方案1】:

    您正试图覆盖一个不存在的字段。

    您没有用户,只有请求者或被请求者。 举个例子

    FactoryGirl.create(:treating, requestor: @user, created_at: 1.hour.ago)
    

    【讨论】:

    • 谢谢!我曾尝试过并收到此错误:3)用户处理关联应销毁相关处理失败/错误:FactoryGirl.create(:requestor,用户:@user,created_at:1.day.ago)ArgumentError:工厂未注册:请求者
    • 您是否正在尝试创建用户并请求请求者。工厂中没有定义Requestor,所以没有注册。
    • 抱歉,我的意思是:FactoryGirl.create(:treating, requestor: @user, created_at: 1.day.ago)
    • 不幸的是,在我的 user_spec 中使用上述代码,在我的终端中仍然收到类似的错误消息,关于未注册的“特征”:1)用户处理关联应该以正确的顺序进行正确的处理失败/Error: FactoryGirl.create(:treating, requestor: @user, created_at: 1.day.ago) ArgumentError: Trait not registered: requestor
    猜你喜欢
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多