5

我正在处理的一个项目有集成测试,这些测试实际上会通过网络连接到第 3 方 API……运行这些测试需要长时间。我建议我们实现类似 VCR 的东西,以便测试与之交互的数据可以被捕获为夹具,并提高这些测试的可靠性和速度。

我目前无法访问代码库,但我相信测试正在做这样的事情:

before do
  login_some_user
end

after do
  make_web_request_to_clear_items_in_cart
end

it "adds some items to the user's cart" do
  make_web_request_to_add_item_to_a_cart
end

所以基本上,前块发出了一个 Web 请求,示例发出了一个完全不同的请求,而后块(我知道这不是理想的使用)发出了第三个请求来清理示例创建的记录。

我在 spec_helper 中设置了一个 around 块,它捕获 Web 请求并以示例命名存储它们。但是,在反复运行测试之后,我发现它们变得非常不稳定,有时通过,有时没有。我尝试将 before 和 after 块包装在单独的 VCR.use_cassette 块调用中,但没有任何区别。

我想知道我是否遗漏了什么,是否有办法处理这样的多个请求或什么?

4

1 回答 1

9

VCR 可以处理多个请求。从您的伪代码中,您将拥有以下内容:

it "adds some items to the user's cart" do
 VCR.use_cassette "your_path/cassette_name" do
   login_some_user
   make_web_request_to_add_item_to_a_cart
   make_web_request_to_clear_items_in_cart
 end
end

盒式磁带your_path/cassette_name将包含所有 3 个 Web 请求。

您的问题可能来自使用beforeafter块。请参阅Myron Marston 对VCR 如何处理before(:all)挂钩的说明。

于 2013-05-23T23:44:42.570 回答