【问题标题】:How should I test Rails Enums?我应该如何测试 Rails 枚举?
【发布时间】:2015-06-15 13:18:14
【问题描述】:

假设我有一个名为 CreditCard 的模型。由于一些技术限制,最好将卡网络表示为枚举。我的代码如下所示:

class CreditCard < ActiveRecord::Base
   enum network: [:visa, :mastercard, :amex]
end

使用枚举时应该测试什么?

【问题讨论】:

  • 我也有同样的问题

标签: ruby-on-rails ruby-on-rails-4 testing enums rails-activerecord


【解决方案1】:

如果你使用数组,你需要确保顺序保持:

class CreditCard < ActiveRecord::Base
  enum network: [:visa, :mastercard, :amex]
end

describe CreditCard, '#status' do
  let(:network) { [: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

如果您使用哈希,顺序无关紧要,但每个键的值都会。因此,确保每个键的编号相同总是好的。

【讨论】:

    【解决方案2】:

    根据Enum 的 Rails 文档,数组的每个值都对应一个整数。我猜您想测试网络阵列是否始终保持相同的顺序。如果您使用的是 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:我是用手机写的,也许你需要一些调整才能运行

    【讨论】:

    • 我不喜欢这个解决方案,因为它只是测试 Rails 已经在测试的内容。但是,您已经充分回答了我的问题,可能根本没有什么可以测试的:)。
    • 是的,我同意你的看法。我认为也许你根本不需要测试它,只测试更复杂的部分。
    猜你喜欢
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多