【发布时间】:2013-04-10 08:31:37
【问题描述】:
我在 rspec 上有这个配置:
config.expect_with :rspec do |c|
c.syntax = :should
end
它使expect {}.to raise_error 无效,我怎么能用 should 语法编写这个引发错误的测试?
【问题讨论】:
-
设置
c.syntax = [:should, :expect]不是一个选项?
我在 rspec 上有这个配置:
config.expect_with :rspec do |c|
c.syntax = :should
end
它使expect {}.to raise_error 无效,我怎么能用 should 语法编写这个引发错误的测试?
【问题讨论】:
c.syntax = [:should, :expect]不是一个选项?
我建议仅当您无法使用最新的 RSpec expect { code() }.to raise_error 语法时才使用它:
lambda { foo( :bad_param ) }.should raise_error
或
lambda { foo( :bad_param ) }.should raise_error( ArgumentError )
将 foo( :bad_param ) 替换为您希望断言失败的任何 Ruby 代码,并将 ArgumentError 替换为您希望失败引发的任何异常类。
【讨论】:
Foo?你能说出你的代码基本上在做什么吗?
lambda { my_method_to_test() }.should raise_error...
expect 语法由于某种原因在他的项目中被阻止。我会在答案中澄清这一点。
在可以使用expect 语法的测试中,我更喜欢在自己的describe 块中定义该测试,将测试内容(即expect { <this_content> })放入stabby lambda,将其粘贴到新的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 中。
【讨论】: