Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 我应该如何测试Rails枚举?_Ruby On Rails_Ruby On Rails 4_Testing_Enums_Rails Activerecord - Fatal编程技术网

Ruby on rails 我应该如何测试Rails枚举?

Ruby on rails 我应该如何测试Rails枚举?,ruby-on-rails,ruby-on-rails-4,testing,enums,rails-activerecord,Ruby On Rails,Ruby On Rails 4,Testing,Enums,Rails Activerecord,假设我有一个叫信用卡的模型。由于一些技术限制,最好将卡网络表示为枚举。我的代码如下所示: class CreditCard < ActiveRecord::Base enum network: [:visa, :mastercard, :amex] end class信用卡

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

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

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

根据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:我在用手机写信,也许你需要一些调整才能运行

如果你使用array,你需要确保订单将被保留:

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
class信用卡

如果使用散列,则顺序无关紧要,但每个键的值将无关紧要。因此,确保每个键都有相同的数字对用户总是有好处的。

我也有同样的问题,我不喜欢这个解决方案,因为它只是测试Rails已经测试的内容。然而,你已经充分回答了我的问题,也许根本没有什么需要测试的:)。是的,我同意你的看法。我认为也许你根本不需要测试它,只需要测试更复杂的部分。