试图引发ArgumentError rspec

时间:2013-11-16 15:31:31

标签: ruby-on-rails ruby 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

2 个答案:

答案 0 :(得分:8)

执行:

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

即通过一个块来预期

答案 1 :(得分:2)

将rpn.evaluate('%')作为参数和块传递的区别在于

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

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

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

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