代码之家  ›  专栏  ›  技术社区  ›  MEH

nomethodError:未定义的方法'user='rspec

  •  0
  • MEH  · 技术社区  · 7 年前

    我用这个工厂文件 user 模型:

    FactoryBot.define do
      factory :user do |f|
        f.sequence(:first_name) { |n| "#{Faker::Name.first_name}foo#{n}" }
        f.sequence(:last_name) { |n| "#{Faker::Name.last_name}foo#{n}" }
        f.sequence(:email) { |n| "foo#{n}@example.com" }
        f.password "foobar"
        f.password_confirmation { |u| u.password }
        f.sequence(:confirmed_at) { Date.today }
        f.sequence(:telephone_number) { Faker::Number.number(10) }
        f.sequence(:mobile_phone_number) { Faker::Number.number(10) }
        f.sequence(:verification_code) { '0000' }
        f.sequence(:is_verified) { false }
      end
    end
    

    Order.rb 工厂是:

    FactoryBot.define do
      factory :order do
        association :store
        association :user
        total_price Faker::Number.positive
        total_discount Faker::Number.positive
      end
    end
    

    以及 order 模型应该有这三个FK,其中两个来自 User :

    class Order < ApplicationRecord
      belongs_to :customer, class_name: 'User'
      belongs_to :carrier, class_name: 'User'
      belongs_to :store
    end
    

    而在 order_controllers_spec.rb 文件,我有:

    let(:customer) { FactoryBot.create(:user) }
    let(:carrier) { FactoryBot.create(:user) }
    let(:store) { FactoryBot.create(:store) }
    let(:order) { FactoryBot.create(:order, customer_id: customer.id, carrier_id: carrier.id, store_id: store.id) }
    

    每次我运行 show 测试,

    describe "GET show" do
        it 'has a 200 status code' do
            get :show, params: { id: order_item.id }
            expect(response.status).to eq(200)
        end
    end
    

    我有这个错误

    Failure/Error: let(:order) { FactoryBot.create(:order, customer_id: customer.id, carrier_id: carrier.id, store_id: store.id) }
    
     NoMethodError:
       undefined method `user=' for #<Order:0x00007fcd2efc5118>
    

    关于如何解决这个问题有什么想法吗?

    1 回复  |  直到 7 年前
        1
  •  4
  •   Ursus    7 年前

    我认为在你的 Order 您使用的工厂定义 user ,而不是 customer carrier 作为您的 秩序 模型定义。

    association :customer, factory: :user
    association :carrier,  factory: :user