Ruby 如何在rspec'时编写expect{}以引发_错误;的语法配置为仅应

Ruby 如何在rspec'时编写expect{}以引发_错误;的语法配置为仅应,ruby,testing,syntax,rspec,Ruby,Testing,Syntax,Rspec,我在rspec上有以下配置: config.expect_with :rspec do |c| c.syntax = :should end 它使expect{}。若要引发{u错误无效,我如何使用should语法编写此错误引发测试?我建议仅当最新的RSpecexpect{code()}时才使用此语法。若要引发{u错误语法对您不可用,请执行以下操作: lambda { foo( :bad_param ) }.should raise_error 或 将foo(:bad_param)替换为任

我在rspec上有以下配置:

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

它使
expect{}。若要引发{u错误
无效,我如何使用should语法编写此错误引发测试?

我建议仅当最新的RSpec
expect{code()}时才使用此语法。若要引发{u错误
语法对您不可用,请执行以下操作:

lambda { foo( :bad_param ) }.should raise_error


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

在可以使用
expect
语法的测试中,我更喜欢在自己的
描述
块中定义该测试,并放置测试内容(即
expect{}
)插入一个新的
主题
,并在
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

设置
c.syntax=[:应该,:期望]
不是一个选项?什么是
Foo
?你能告诉我你的代码基本上在做什么吗?Foo是任何东西的通用编程术语,在本例中是一个方法。所以把你想测试的东西包装在lambda中-你可以将它重写为
lambda{my_method_to_test()}.应该引起_错误…
非常奇怪的行为,因为这种做法应该被弃用-参见“块与值语法的统一”一段@Gregory Goltsov:是的,它被弃用了,但OP特别要求使用较旧的语法,因为
expect
语法由于某种原因在他的项目中被阻止。我将在回答中澄清这一点。
describe "some test that raises error" do
  let(:bad_statement) { something_that_raises_an_error }
  subject { -> { bad_statement } }
  it { should raise_error }
end