我的工厂: 推出.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
,只是为了看看是否有解决我落后的问题,但没有运气。
bundle update
方法,决定不使用它,但是 VScode 在正确保存更新的文件方面存在问题。仍然不能 100% 确定发生了什么,但这不再是问题了!