【问题标题】:How do you code to solve raise_error in rspec?您如何编写代码来解决 rspec 中的 raise_error?
【发布时间】:2014-10-10 03:25:37
【问题描述】:

我似乎无法找到看似非常简单的谷歌搜索。我的程序中有一个 rspec

it "fails informatively when there's not enough values stacked away" do
  expect {
    calculator.plus
  }.to raise_error("calculator is empty")

我正在编写的 RPN 计算器程序中的 plus 方法的代码是:

def plus
    if @calculator.length == 0
        raise ArgumentError.new("calculator is empty")
    end
    sum = @calculator[-1] + @calculator[-2]
    2.times {@calculator.pop}
    @calculator.push(sum)
end

但这并不能解决任何问题。我对编程非常陌生,尤其是在异常方面,因此非常感谢任何帮助。

我确信它真的很简单,但我已经坚持了一个多小时到处寻找。

这是我在运行 bundle rspec 时收到的错误消息:

F 失败/错误:期望 { “计算器为空”的预期异常,得到 # 回溯: # ./lib/12_rpn_calculator.rb:22:in `减号' # ./spec/12_rpn_calculator_spec.rb:124:in `block (3 levels) in ' # ./spec/12_rpn_calculator_spec.rb:123:in `block (2 levels) in '

【问题讨论】:

  • 这里不清楚需要修复什么...你在看什么?
  • 我把失败放在原来的帖子里,但它发布的都很奇怪,我不想弄乱它是如何从命令提示符粘贴的。
  • 我想通了...叹息这么简单.. 摆脱 if 并在 @calculator.length 时提出“计算器为空”

标签: ruby exception rspec


【解决方案1】:

假设您希望您的应用程序代码保持不变,您应该可以使用以下任何一种:

it "fails informatively when there's not enough values stacked away" do
  expect { calculator.plus }.to raise_error(/calculator is empty/)
  expect { calculator.plus }.to raise_error(ArgumentError, "calculator is empty")
  expect { calculator.plus }.to raise_error(ArgumentError, /calculator is empty/)
end

https://relishapp.com/rspec/rspec-expectations/docs/built-in-matchers/raise-error-matcher

【讨论】:

    【解决方案2】:

    我写如下。我在解决这个测试时遇到了很多失败。

    def times
      n1=@calculator.pop
      n2=@calculator.pop
      if n1==nil || n2==nil
        raise('calculator is empty')
      else
        @calculator.push(n2.to_f*n1.to_f)
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多