RSpec expect something before expect raise_error



想象有一个方法可以抢救并记录一些日志。

def do_something
# do stuff
some_client.call(var1)
rescue StandardError => e
# log some stuff.
Rails.logger.error("#{self.class} - Var 1 is #{var1}.") if e.is_a?(MyError)
raise
end

然后在RSpec中,我想要

  • 断言错误被引发。
  • 记录错误
before do
allow(Rails.logger).to receive(:error)
allow(some_client).to receive(:call).and_raise(MyError)
end
it "logs the error" do
subject
expect(Rails.logger).to have_received(:error).with(/some message with var1/)
end
it "raises MyError" do
expect { subject }.to raise_error(MyError)
end

expect { subject }.to raise_error(MyError)部分按预期工作,但是我应该如何断言日志记录?使用上面的示例代码,RSpec将在不断言日志记录的情况下报告引发的错误。

把它们都放在同一个it中。期望它引发一个错误并记录它。

it "raises MyError and logs it" do
expect { subject }.to raise_error(MyError)
expect(Rails.logger).to have_received(:error).with(/some message with var1/)
end

或者,如果你真的想检查它是否在单独的it中记录错误,你必须挽救错误。否则你的规范将失败(未处理的错误)

it "logs the error" do
subject
rescue
ensure
expect(Rails.logger).to have_received(:error).with(/some message with var1/)
end

相关内容

  • 没有找到相关文章

最新更新