Rspec没有工作,或者没有加薪?

gdz*_*gel 13 ruby tdd rspec

我在写一些小红宝石程序的同时正在学习TDD.我有以下课程:

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

而我正试图用这个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
Run Code Online (Sandbox Code Playgroud)

它永远不会工作,我不明白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)>'
Run Code Online (Sandbox Code Playgroud)

我希望这是一件我很想念的简单事,但我只是没有看到它.

Mic*_*ile 41

如果要检查异常,则必须将其与lambda中的测试分开,否则异常将冒出来.

 lambda {one.check("donee")}.should raise_error(RuntimeError, "donee is not a directory")
Run Code Online (Sandbox Code Playgroud)

编辑:由于人们仍然使用这个答案,这里是在Rspec 3中做什么:

 expect{one.check("donee")}.to raise_error(RuntimeError, "donee is not a directory")
Run Code Online (Sandbox Code Playgroud)

lambda不再是必需的,因为expect语法采用可选块.

  • 我使用`expect(...).to`而不是`expect {...}.to`这个答案终于帮我找到了错误! (7认同)