繁体   English   中英

在Rspec和FactoryBot期间错误未定义的常量和冻结的数组

[英]Error undefined constant and frozen Array during Rspec and FactoryBot

我在Rspec期间遇到错误。 当我运行rspec时,发生以下错误。

我在这里看到了一些问题和答案,但没有一个对我有帮助。 其中之一包括将Factory Bot降级到4.10,然后运行rubocop修改常数,同时升级到5.0。

我不知道发生了什么。 我在这里想念什么?

NoMethodError:

undefined method 'container_size_cd' in 'container_weight_limit' factory
# ./spec/factories/container_weight_limit.rb:5:in `block (2 levels) in 
<top (required)>'
# ./spec/factories/container_weight_limit.rb:4:in `block in <top 
(required)>'
# ./spec/factories/container_weight_limit.rb:3:in `<top (required)>'
# ./config/environment.rb:5:in `<top (required)>'
# ./spec/rails_helper.rb:3:in `require'
# ./spec/rails_helper.rb:3:in `<top (required)>'
# ./spec/models/container_weight_limit_spec.rb:3:in `require'
# ./spec/models/container_weight_limit_spec.rb:3:in `<top (required)>'



An error occurred while loading 
./spec/models/logistic_process_cost_per_product_spec.rb.
Failure/Error: require File.expand_path('../../config/environment', 
__FILE__)

FrozenError:
 can't modify frozen Array
# ./config/environment.rb:5:in `<top (required)>'
# ./spec/rails_helper.rb:3:in `<top (required)>'
# ./spec/models/logistic_process_cost_per_product_spec.rb:3:in 
`<top          
(required)>'

 An error occurred while loading         
 ./spec/models/logistic_process_cost_spec.rb.
 Failure/Error: require 
 File.expand_path('../../config/environment', 
 __FILE__)

 FrozenError:
 can't modify frozen Array
 # ./config/environment.rb:5:in `<top (required)>'
 # ./spec/rails_helper.rb:3:in `<top (required)>'
 # ./spec/models/logistic_process_cost_spec.rb:3:in `<top 
 (required)>'

 An error occurred while loading 
 ./spec/models/product_freight_spec.rb.
 Failure/Error: require 
 File.expand_path('../../config/environment', 
 __FILE__)

 FrozenError:
 can't modify frozen Array
 # ./config/environment.rb:5:in `<top (required)>'
 # ./spec/rails_helper.rb:3:in `<top (required)>'
 # ./spec/models/product_freight_spec.rb:3:in `<top (required)>'

 An error occurred while loading ./spec/models/product_spec.rb.
 Failure/Error: require 
 File.expand_path('../../config/environment', 
 __FILE__)

 FrozenError:
 can't modify frozen Array
 # ./config/environment.rb:5:in `<top (required)>'
 # ./spec/rails_helper.rb:3:in `<top (required)>'
 # ./spec/models/product_spec.rb:3:in `<top (required)>'

 An error occurred while loading ./spec/models/user_spec.rb.
 Failure/Error: require 
 File.expand_path('../../config/environment', 
 __FILE__)

 FrozenError:
 can't modify frozen Array
 # ./config/environment.rb:5:in `<top (required)>'
 # ./spec/rails_helper.rb:3:in `<top (required)>'
 # ./spec/models/user_spec.rb:3:in `<top (required)>'

 An error occurred while loading 
 ./spec/services/karavel_currency_service_spec.rb.
Failure/Error: require File.expand_path('../../config/environment', 
__FILE__)

FrozenError:
can't modify frozen Array
# ./config/environment.rb:5:in `<top (required)>'
# ./spec/rails_helper.rb:3:in `<top (required)>'
# ./spec/services/karavel_currency_service_spec.rb:3:in `<top (required)>'
No examples found.

Finished in 0.00035 seconds (files took 7.28 seconds to load)
0 examples, 0 failures, 7 errors occurred outside of examples

/spec/factories/container_weight_limit.rb

# frozen_string_literal: true

FactoryBot.define do
 factory :container_weight_limit do
   container_size_cd 0
   bulk 22
   bag_25kg 25
   bag_50kg 25
   bigbag_900kg 26
   bigbag_1100kg 26
 end
end

config / environment.rb

 # Load the Rails application.
 require_relative 'application'

 # Initialize the Rails application.
 Rails.application.initialize!

 ActionView::Base.field_error_proc = Proc.new do |html_tag, instance|
  html_tag.html_safe
 end

编辑之前,您已经:

An error occurred while loading 
./spec/models/container_weight_limit_spec.rb.

Failure/Error:
 Factory.define do
  factory :offer do
   code { '003433' }
   product_id
   user_id
   crop  { '2020/06' }
   volume_unit { :ton }
   volume { 100 }
   weight_limit { 28 }
   price_unit { 400 }

通过使用FactoryBot而不是Factory ,例如:

An error occurred while loading 
./spec/models/container_weight_limit_spec.rb.

Failure/Error:
 FactoryBot.define do
  factory :offer do
   code { '003433' }
   product_id
   user_id
   crop  { '2020/06' }
   volume_unit { :ton }
   volume { 100 }
   weight_limit { 28 }
   price_unit { 400 }

然后,您将:

/spec/factories/container_weight_limit.rb

# frozen_string_literal: true

FactoryBot.define do
 factory :container_weight_limit do
   container_size_cd 0
   bulk 22
   bag_25kg 25
   bag_50kg 25
   bigbag_900kg 26
   bigbag_1100kg 26
 end
end

应该是:

/spec/factories/container_weight_limit.rb

# frozen_string_literal: true

FactoryBot.define do
  factory :container_weight_limit do
    container_size_cd  {0}
    bulk               {22}
    bag_25kg           {25}
    bag_50kg           {25}
    bigbag_900kg       {26}
    bigbag_1100kg      {26}
  end
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM