Как исправить перечисление «неопределенный метод» в тесте rspec с FactoryBot? - PullRequest
1 голос
/ 04 ноября 2019

Я пытаюсь протестировать модель, которую я создал для своего приложения, она связана с двумя другими моделями, также использующими Factory Bot для построения теста, однако она не распознает ее, возвращаемая ошибка: Failure/Error: status :pending //// NoMethodError: undefined method 'status' in 'pending' factory.

Я запускаю приложение с Ruby 2.6.1, Rails 5.2.3, FactoryBot 5.0.2, Rspec 3.8. Я пробовал разные способы определения перечисления. Я не знаю, что делать дальше.

Модель:

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

    has_many :users
    has_many :colleges
end

Фабрика:

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

Rspec:

require 'rails_helper'

RSpec.describe CollegeWhitelist, type: :model do
  describe "#consistency " do
    it 'cannot insert the same user for the same college in permissions' do
      @permission = build(:college_whitelist)
      p @permission
    end
  end
end

Iожидал, что он пройдет тест, сначала просто распечатав объект.

1 Ответ

1 голос
/ 04 ноября 2019

Речь идет о конфликте имен.

Вы должны заключить значение столбца 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
...