我正在开发的一个项目有集成测试,它实际上已经通过线路击中了第三方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请求并以示例命名存储它们。然而,在重复运行测试后,我发现它们变得非常松散,有时会传递,有时候不会......我尝试在单独的VCR.use_cassette块调用中包装前后块,但它没有区别。
我想知道我是否遗漏了一些东西,如果有办法处理这样的多个请求或什么?
答案 0 :(得分:7)
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个网络请求。
您的问题可能来自使用before
和after
块。请参阅Myron Marston explanation,了解VCR如何处理before(:all)
挂钩。