【问题标题】:RSpec, why did I have to place my subject in a lambda to get it to catch the exception?RSpec,为什么我必须将我的主题放在一个 lambda 中才能让它捕捉到异常?
【发布时间】:2013-12-03 09:31:40
【问题描述】:

我不明白为什么我必须这样做:

subject { lambda { JenkinsClient.new(params.tap{|p| p.delete(:password)}) } }
it { expect { subject.call }.to raise_error(ArgumentError) }   

要让它捕获引发的异常,而不是:

subject { JenkinsClient.new(params.tap{|p| p.delete(:password)}) }
it { expect { subject }.to raise_error(ArgumentError) }   

有人可以提供对此的见解吗?

【问题讨论】:

  • 为了清楚起见,您是说第二个示例(没有 lambda)不起作用吗?你得到什么例外?
  • 我在运行代码时收到 ArgumentError 异常,因此它无法按预期工作。引发错误并停止测试,但未被捕获。

标签: ruby exception rspec assertions


【解决方案1】:

这不是答案,但我想(通过格式)证明以下内容可以正常工作,因此我认为您遇到的问题不存在一些基本的 RSpec 问题:

describe "Subject raising error" do
  subject {raise ArgumentError}
  it {expect {subject}.to raise_error(ArgumentError)}
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-10
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多