我对Rails集成测试有疑问。 我有一个与此其他内部应用程序对话的应用程序。
应用程序向internal_app发送请求,该请求的参数之一涉及存储在会话cookie中的session_id。
由于各种原因,使用webmock
和vcr
gem终止了对外部服务的请求。它将请求/响应记录到Fixture文件中,以便下次运行请求时,它将命中Fixture文件而不是真实服务。
我的问题是,每次运行测试时,session_id
都会更改。根据webmock的说法,这意味着发出的请求与存根的请求不匹配,从而导致测试失败。在控制器测试中,我可以直接访问会话,并根据需要在其中进行更改/存根。使用集成测试时,我无法直接访问该会话,因此我无法使用Rails为该测试生成的session_id。有谁知道一种将session_id修改/存入集成测试以达到预期效果的好方法?我正在考虑一些较不受欢迎的方法(例如,放弃那些集成测试中的vcr gem),但我更希望找到一种方法,使session_id成为某个期望值。
在Rails 5.1应用程序上使用Capybara / Poltergeist / phantomjs进行测试。
答案 0 :(得分:0)
在集成测试期间,您实际上不应该对应用程序的内部进行测试,因为它确实使集成测试失去了作用。但是,您可以使用:match_requests_on
选项-https://relishapp.com/vcr/vcr/docs/request-matching-匹配请求时,将VCR配置为忽略session_id,然后在需要时使用动态录像带-https://relishapp.com/vcr/vcr/v/3-0-3/docs/cassettes/dynamic-erb-cassettes-将正确的session_id插入响应中