当rspec的语法配置时,如何编写expect {}。raise_error

时间:2013-04-10 08:31:37

标签: ruby testing syntax rspec

我在rspec上有这个配置:

config.expect_with :rspec do |c|
  c.syntax = :should
end

它使expect {}.to raise_error无效,我怎么能用the syntax语法编写这个错误提升测试?

2 个答案:

答案 0 :(得分:8)

我建议只有在您无法使用最新的RSpec expect { code() }.to raise_error语法时才使用此功能:

lambda { foo( :bad_param ) }.should raise_error

lambda { foo( :bad_param ) }.should raise_error( ArgumentError )

使用您希望断言的任何Ruby代码替换foo( :bad_param )失败,并使用您期望失败的异常类替换ArgumentError

答案 1 :(得分:4)

在我可以使用expect语法的测试中,我更喜欢在自己的describe块中定义该测试,将测试内容(即expect { <this_content> })放入{{3将它贴在新的subject中,并在it块中引用它,如下所示:

describe "some test that raises error" do
  let(:bad_statement) { something_that_raises_an_error }
  subject { -> { bad_statement } }
  it { should raise_error }
end

如果您愿意,也可以完全取消let声明并将其内容直接放在subject