我在写一些小红宝石程序的同时正在学习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语法采用可选块.