如何使用FactoryBot修复rspec测试中的“未定义方法”枚举?

时间:2019-11-03 21:00:53

标签: ruby-on-rails ruby rspec ruby-on-rails-5 factory-bot

我正在尝试测试为应用程序创建的模型,它与其他两个模型相关联,也使用Factory Bot来构建测试,但是它无法识别,错误返回为:{{1 }}

我正在使用Ruby 2.6.1,Rails 5.2.3,FactoryBot 5.0.2,Rspec 3.8运行该应用程序。我尝试了定义枚举的不同方法。我不知道该怎么办。

型号:

Failure/Error: status :pending //// NoMethodError: undefined method 'status' in 'pending' factory.

工厂:

class CollegeWhitelist < ApplicationRecord
    enum status: {pending: 0, approved: 1, rejected: 2}

    has_many :users
    has_many :colleges
end

Rspec:

FactoryBot.define do
  factory :college_whitelist do
    association :user
    association :college

    trait :pending do
      status :pending
    end

    trait :approved do
      status :approved
    end

    trait :rejected do
      status :rejected
    end
  end
end

我希望它首先通过打印对象即可通过测试。

1 个答案:

答案 0 :(得分:1)

这是命名冲突的问题。

您必须将status列的值用大括号括起来,否则它将自称:

FactoryBot.define do
  factory :college_whitelist do
    ...

    trait :pending do
      status { :pending }
    end

    trait :approved do
      status { :approved }
    end

    trait :rejected do
      status { :rejected }
    end
  end
end