检查ruby方法值

时间:2018-01-22 09:34:37

标签: ruby rspec

我有这种红宝石方法。我想验证当前属性是否存在且值是否正确。我怎么能用外部方法做到这一点?

def base_commands
    { currency: 'EUR',
      card_number: '4200000000000000',
      cvv: '123',
      amount: '12345' }
end

快速举例:

has_children = !base_commands[:currency].nil?

但我该如何验证这些值?

2 个答案:

答案 0 :(得分:1)

请注意,对于h[:x].nil?,您不一定要测试哈希是否包含元素:x是否为x,因为{x: nil}.nil?也会评估为 true 。要测试是否存在密钥,您必须使用h.has_key?(:x)

假设您有一个哈希h并想要验证它是否包含方法base_commands返回的哈希中存在的所有键,您可以执行base_commands.keys.all? {|k| h.has_key?(k)}之类的操作

要测试属于某个键的值是否符合预期,您必须考虑平等意味着什么。在你的情况下,从方法base_commands返回的哈希只有字符串作为值,所以在你的情况下,简单的相等很可能是你想要的:h[:currency] == base_commands[:currency],或者你想要的任何方式验证它。

在一般情况下,你可以将任意对象作为值,在这里你必须考虑如何看待平等。默认的==运算符可能使用对象标识,如果这不是您想要的,则必须定义自己的相等方法。

答案 1 :(得分:0)

RSpec有include matcher

def base_commands
  { currency: 'EUR', card_number: '4200000000000000', cvv: '123', amount: '12345' }
end

RSpec.describe(base_commands) do
  it { is_expected.to include(:currency) }                    # key only
  it { is_expected.to include(currency: 'EUR') }              # key and value
  it { is_expected.to include(currency: 'EUR', cvv: '123') }  # multiple values
end