字符串传递is_a?浮动验证

时间:2015-08-08 16:20:57

标签: ruby rspec

我有一个方法来检查参数是否像这样浮点数:

  def validate_input val
    raise ArgumentError unless (val.is_a? Float)
  end

在我的测试中,我正在使用以下方法检查此方法:

  it "only accepts floating point numbers" do
    expect(c.to_rad('65A.98')).to raise_error(ArgumentError)
  end

但是当我运行rspec时,测试失败并带有

  1) Customer#to_rad argument is invalid only accepts floating point numbers
     Failure/Error: expect(c.to_rad('65A.98')).to raise_error(ArgumentError)
     ArgumentError:
       ArgumentError
     # ./customer.rb:54:in `validate_input'

我对rspec和测试很新,所以我不知道出了什么问题。我确实尝试使用instance_of?而不是is_a?,但它会产生相同的结果。在我的测试中,我使用c实例化c = Customer.new。此外,我不知道它是否有所作为,但我只使用红宝石。没有铁轨。

1 个答案:

答案 0 :(得分:3)

你必须将一个块传递给expect,以便RSpec运行该块并挽救错误。否则它将在to_rad被调用之前运行to,导致在执行RSpec匹配器之前抛出异常。尝试:

expect { c.to_rad('65A.98') }.to raise_error(ArgumentError)