gpt4 book ai didi

ruby-on-rails - Rails-枚举字段的测试验证

转载 作者:行者123 更新时间:2023-12-03 20:38:11 25 4
gpt4 key购买 nike

我正在使用Rails 4枚举,并且想要正确地测试它们,所以我为枚举字段设置了这些测试:

it { should validate_inclusion_of(:category).in_array(%w[sale sale_with_tax fees lease tax_free other payroll]) }
it { should validate_inclusion_of(:type).in_array(%w[receivable payable]) }


这是他们正在验证的模型:

class Invoice < ActiveRecord::Base
belongs_to :user

enum category: [:sale, :sale_with_tax, :fees, :lease, :tax_free, :other, :payroll]
enum type: [:receivable, :payable]

validates :user, presence: true
validates :issue_date, presence: true
validates :series, presence: true
validates :folio, presence: true
validates :issuing_location, presence: true
validates :payment_method, presence: true
validates :last_digits, presence: true
validates :credit_note, presence: true
validates :total, presence: true
validates :subtotal, presence: true
validates :category, presence: true
validates_inclusion_of :category, in: Invoice.categories.keys
validates :type, presence: true
validates_inclusion_of :type, in: Invoice.types.keys
end


但是当我运行测试时,我得到:

1) Invoice should ensure inclusion of type in [0, 1]
Failure/Error: it { should validate_inclusion_of(:type).in_array([0,1]) }
ArgumentError:
'123456789' is not a valid type
# ./spec/models/invoice_spec.rb:20:in `block (2 levels) in <top (required)>'

2) Invoice should ensure inclusion of category in [0, 1, 2, 3, 4, 5, 6]
Failure/Error: it { should validate_inclusion_of(:category).in_array([0,1,2,3,4,5,6]) }
ArgumentError:
'123456789' is not a valid category
# ./spec/models/invoice_spec.rb:19:in `block (2 levels) in <top (required)>'


我也尝试过在测试数组中使用字符串值,但是我遇到了同样的错误,我真的不理解。

最佳答案

使用Shoulda匹配器,我们可以使用以下代码来测试枚举

it { should define_enum_for(:type).with([:receivable, :payable]) }

it { should define_enum_for(:category).
with(:sale, :sale_with_tax, :fees, :lease, :tax_free, :other, :payroll) }

关于ruby-on-rails - Rails-枚举字段的测试验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29780121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com