【问题标题】:Rspec not working, or raise not raising?Rspec不工作,或提高不提高?
【发布时间】:2011-02-09 15:05:13
【问题描述】:

我正在学习 TDD,同时编写一些小型 ruby​​ 程序。我有以下课程:

class MyDirectory
  def check(dir_name)
    unless File.directory?(dir_name) then
      raise RuntimeError, "#{dir_name} is not a directory"
    end
  end
end

我正在尝试用这个 rspec 测试来测试它。

describe MyDirectory do
  it "should error if doesn't exist" do
    one = MyDirectory.new
    one.check("donee").should raise_exception(RuntimeError, "donee is not a directory")
  end
end

它永远不会起作用,我不明白 rspec 输出有什么问题。

Failures:

  1) MyDirectory should error if doesn't exist
     Failure/Error: one.check("donee").should raise_error(RuntimeError, "donee is not a directory")
     RuntimeError:
       donee is not a directory
     # ./lib/directory.rb:4:in `check'
     # ./spec/directory_spec.rb:9:in `block (2 levels) in <top (required)>'

我希望这是我缺少的一些简单的东西,但我只是没有看到它。

【问题讨论】:

    标签: ruby tdd rspec


    【解决方案1】:

    如果您要检查异常,则必须使用 lambda 将其与测试分开,否则异常会冒泡。

     lambda {one.check("donee")}.should raise_error(RuntimeError, "donee is not a directory")
    

    编辑:由于人们仍然使用这个答案,这是 Rspec 3 中的操作:

     expect{one.check("donee")}.to raise_error(RuntimeError, "donee is not a directory")
    

    不再需要 lambda,因为 expect 语法采用可选块。

    【讨论】:

    • 我用expect(...).to而不是expect{...}.to,这个答案终于帮我找到了错误!
    • 请记住,如果您使用括号而不是使用块,则异常可能会冒泡。请参阅relishapp.com/rspec/rspec-expectations/docs/built-in-matchers 块语法应该用于预期异常。
    • 多么痛苦。很好的答案!我从来没有想过这个
    【解决方案2】:

    现在应该被弃用所以而不是这个

    -> { described_class.new('InValidParam') }
             .should raise_error(RuntimeError)
    # or
    lambda { described_class.new('InValidParam') }
             .should raise_error(RuntimeError)
    

    使用这个:

    expect { described_class.new('InValidParam') }.to raise_error(RuntimeError)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-07
      • 2012-06-07
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 2020-02-11
      • 2022-01-08
      • 1970-01-01
      相关资源
      最近更新 更多