Factorybot Rspec 工厂在创建时失败“update_attribute”时出错

问题描述 投票:0回答:1

我的工厂: 推出.rb


FactoryBot.define do
  factory :rollout do
    name { Faker::IndustrySegments.industry.parameterize.underscore }
    percent_enabled { 0 }
    offset { 0 }
    green_list { [] }
    red_list { [] }
    resource_type { 'User' }
    trait :with_user do
      resource_type { 'User' }
    end
  end
end

型号: 推出.rb

class Rollout < ApplicationRecord
  before_create :set_offset
  before_validation :uppercase_resource_type

  validates :name, presence: true, uniqueness: { case_sensitive: false }
  validates_inclusion_of :percent_enabled, in: 0..100
  validates :resource_type, presence: true, inclusion: { in: %w[User Role Instrument Profile] }

 ...methods...
end

错误:

Failures:

  1) Rollout a valid Rollout that has working validations is valid with valid attributes
     [31mFailure/Error: update_attribute(:percent_enabled, num)[0m
     [31m[0m
     [31mSystemStackError:[0m
     [31m  stack level too deep[0m
     [36m# ./app/models/rollout.rb:60:in `percent_enabled='[0m
     [36m# ./app/models/rollout.rb:60:in `percent_enabled='[0m
     [36m# ./app/models/rollout.rb:60:in `percent_enabled='[0m
     [36m# ./app/models/rollout.rb:60:in `percent_enabled='[0m
     [36m# ./app/models/rollout.rb:60:in `percent_enabled='[0m
     [36m# ./app/models/rollout.rb:60:in `percent_enabled='[0m
     [36m# ./app/models/rollout.rb:60:in `percent_enabled='[0m
     [36m# ./app/models/rollout.rb:60:in `percent_enabled='[0m
...

我正在尝试运行非常非常基本的测试,由于某种原因,我无法分配percent_enabled,这是我的模型的属性

rollout_spec.rb

RSpec.describe Rollout, type: :model do
  describe 'a valid Rollout' do
    let(:rollout) { create(:rollout, :with_user) }

    context 'that has working validations' do

      it 'is valid with valid attributes' do
        print(rollout)

        expect(rollout).to be_valid
      end
   end
end

如果我注释掉工厂运行中的

percent_enabled { 0 }
rspec
工作得很好

我看不到任何明显的拼写错误,也不知道为什么这个问题仍然存在。我已经运行了很多次,注释掉不同的行,并确定工厂中的属性分配行有问题,但我不知道是什么。

我尝试了一个新的

rspec

,只是为了看看是否有解决我落后的问题,但没有运气。

    

ruby-on-rails testing rspec factory-bot
1个回答
0
投票
bundle update

方法,决定不使用它,但是 VScode 在正确保存更新的文件方面存在问题。仍然不能 100% 确定发生了什么,但这不再是问题了!

    

© www.soinside.com 2019 - 2024. All rights reserved.