如何判断录像机是否完成了磁带

How to tell if VCR completed the cassette

如何判断 VCR 是否消耗了所有记录的数据?如果被测试的程序终止了 API 访问或根本没有 none,则 VCR 测试仍然正常完成(测试检查是否没有出现错误并在结束时显示完成消息)。有多种方法可以检查状态,但让经过测试的应用程序成功使用盒式磁带所表明的意义远远超过我能想到的任何状态工件。

insert_cassette 选项的源代码中找到:

@option options :allow_unused_http_interactions [Boolean] 如果设置为 false,如果磁带在所有之前弹出,则会引发错误 使用了之前记录的 HTTP 交互。 默认为真。请注意,当错误已经发生时 (如 $! 变量所示)未使用的交互将 允许这样我们就不会沉默原来的错误(这几乎是 当然更多 interesting/important).

并与此 eject_cassette 选项交互:

@option 选项:skip_no_unused_interactions_assertion [布尔值] 如果给出 true,这将跳过 "no unused HTTP interactions" :allow_unused_http_interactions => false 启用的断言 盒式选项。这是为了在您的测试已经完成时使用 一个错误,但是您的测试框架已经处理了它。

所以这被用作:

it 'successfully accesses the proper APIs' do
  VCR.use_cassette('/some/path', allow_unused_http_interactions: false) do
    expect do
      expect do
        described_class.new(param1, param2).process
      end.to_not raise_exception
    end.to output(/Done!/).to_stdout
  end
end