4

我在 rspec 上有这个配置:

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

它使expect {}.to raise_error无效,我怎么能用 should 语法编写这个引发错误的测试?

4

2 回答 2

9

我建议仅在您无法使用最新的 RSpecexpect { code() }.to raise_error语法时才使用它:

lambda { foo( :bad_param ) }.should raise_error

或者

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

替换foo( :bad_param )为您希望断言失败的任何 Ruby 代码,以及ArgumentError您希望失败引发的任何异常类。

于 2013-04-10T08:55:22.983 回答
4

在可以使用expect语法的测试中,我更喜欢在自己的describe块中定义该测试,将测试内容(即expect { <this_content> })放入stabbylambda中,将其粘贴到 newsubject中,然后在块中引用它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.

于 2013-04-10T10:13:51.473 回答