【发布时间】:2014-07-27 18:02:49
【问题描述】:
我目前正在subject 中创建一个对象,需要测试这是否引发异常。以下代码说明了我想要实现的目标:
describe MyClass do
describe '#initialize' do
subject { MyClass.new }
it { is_expected.not_to raise_error(Some::Error) }
end
end
我感觉我做错了。将subject 设置为新对象而不创建对象两次的首选方法是什么?
更新
我的问题有两个方面。首先,这种语法不起作用:
it { is_expected.not_to raise_error }
在 it 块内使用 expect 可以,但是(正如 Jimmy Cuadra 所指出的):
it 'does not raise an error' do
expect { subject }.not_to raise_error
end
我对 RSpec 不够熟悉,无法告诉你这是为什么。
其次,由于RSpec 3.0.0.beta1,可以再将raise_error 与特定的错误类一起使用。因此,以下内容无效:
expect { subject }.to raise_error(Some::Error)
有关详细信息,请参阅
【问题讨论】:
-
你有一个implicit subject,所以你不需要
subject { MyClass.new }。 -
很容易知道,@ArupRakshit!尽管我的简化示例中的构造函数不带参数,但我的实际类中的构造函数却带参数。