我应该如何测试 Rails 枚举?
How should I test Rails Enums?
假设我有一个名为 CreditCard 的模型。由于某些技术限制,最好将卡网络表示为枚举。我的代码看起来像这样:
class CreditCard < ActiveRecord::Base
enum network: [:visa, :mastercard, :amex]
end
使用枚举时应该测试什么?
根据 Rails 文档,Enum 数组的每个值都对应一个整数。我猜您想测试网络阵列是否始终保持 ps 相同的顺序。如果您使用的是 rspec,您可以执行以下操作:
describe 'CreditCard' do
let(:network_values) do
{ visa: 0,
master: 1
# etc
}
end
subject { described_class.new }
it 'has valid a network' do
network_values.each do |type, value|
subject.network = value
subject.save
expect(subject.network).to eql(type.to_s)
end
end
end
ps:我正在用我的手机写作 phone 也许你需要一些调整 运行
如果您使用数组,您需要确保保持顺序:
class CreditCard < ActiveRecord::Base
enum network: %i[visa mastercard amex]
end
RSpec.describe CreditCard, '#status' do
let!(:network) { %i[visa mastercard amex] }
it 'has the right index' do
network.each_with_index do |item, index|
expect(described_class.statuses[item]).to eq index
end
end
end
如果使用哈希,顺序无关紧要,但每个键的值很重要。所以,最好确保每个键都具有相同的值。
假设我有一个名为 CreditCard 的模型。由于某些技术限制,最好将卡网络表示为枚举。我的代码看起来像这样:
class CreditCard < ActiveRecord::Base
enum network: [:visa, :mastercard, :amex]
end
使用枚举时应该测试什么?
根据 Rails 文档,Enum 数组的每个值都对应一个整数。我猜您想测试网络阵列是否始终保持 ps 相同的顺序。如果您使用的是 rspec,您可以执行以下操作:
describe 'CreditCard' do
let(:network_values) do
{ visa: 0,
master: 1
# etc
}
end
subject { described_class.new }
it 'has valid a network' do
network_values.each do |type, value|
subject.network = value
subject.save
expect(subject.network).to eql(type.to_s)
end
end
end
ps:我正在用我的手机写作 phone 也许你需要一些调整 运行
如果您使用数组,您需要确保保持顺序:
class CreditCard < ActiveRecord::Base
enum network: %i[visa mastercard amex]
end
RSpec.describe CreditCard, '#status' do
let!(:network) { %i[visa mastercard amex] }
it 'has the right index' do
network.each_with_index do |item, index|
expect(described_class.statuses[item]).to eq index
end
end
end
如果使用哈希,顺序无关紧要,但每个键的值很重要。所以,最好确保每个键都具有相同的值。