有没有办法在rspec中使用隐式主题正确测试异常提升?
例如,这失败了:
describe 'test' do
subject {raise 'an exception'}
it {should raise_exception}
end
Run Code Online (Sandbox Code Playgroud)
但这传递了:
describe 'test' do
it "should raise an exception" do
lambda{raise 'an exception'}.should raise_exception
end
end
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
subject接受一个返回剩余主题的块.
你想要的是这个:
describe 'test' do
subject { lambda { raise 'an exception' } }
it { should raise_exception }
end
Run Code Online (Sandbox Code Playgroud)
编辑:评论澄清
这个:
describe 'test' do
subject { foo }
it { should blah_blah_blah }
end
Run Code Online (Sandbox Code Playgroud)
或多或少相当于
(foo).should blah_blah_blah
Run Code Online (Sandbox Code Playgroud)
现在,考虑:没有lambda,这变成:
(raise 'an exception').should raise_exception
Run Code Online (Sandbox Code Playgroud)
在此处看到,在评估主题时(在should完全调用之前)会引发异常.而对于lambda,它变成:
lambda { raise 'an exception' }.should raise_exception
Run Code Online (Sandbox Code Playgroud)
这里,主题是lambda,仅在计算should调用时评估(在将捕获异常的上下文中).
虽然每次都会重新评估"主题",但它仍然需要评估您要调用的should内容.
| 归档时间: |
|
| 查看次数: |
2595 次 |
| 最近记录: |