试图引发ArgumentError rspec

我有一个没有通过的Rspec测试,我不明白为什么。 所有其他测试都在通过,除了需要ArgumentError

测试看起来像这样:

 describe "#evaluate" do it "raises error" do expect(rpn.evaluate('%')).to raise_error(ArgumentError) end end 

并且我的文件已设置好,因此会引发错误(作为else语句)

 else raise ArgumentError.new end 

但是rspec告诉我这个

 Failure/Error: expect(rpn.evaluate('%')).to raise_error(ArgumentError) ArgumentError: ArgumentError 

做:

 expect { rpn.evaluate('%') }.to raise_error(ArgumentError) 

即通过一个块来期待

传递rpn.evaluate(’%’)作为参数和作为块的区别是

 expect(rpn.evaluate('%')).to raise_error(ArgumentError) 

将检查rpn.evaluate(’%’)的输出是否引发ArgumentError,而

 expect { rpn.evaluate('%') }.to raise_error(ArgumentError) 

将检查运行代码块 rpn.evaluate(’%’)是否会引发ArgumentError。