【发布时间】:2018-06-29 18:04:45
【问题描述】:
我有一个关于 Rails 集成测试的问题。 我有这个应用程序可以与另一个内部应用程序对话。
应用程序向 internal_app 发出请求,该请求的参数之一涉及存储在会话 cookie 中的 session_id。
由于各种原因,对外部服务的请求使用webmock 和vcr gems 被排除。这会将请求/响应记录到夹具文件中,以便下次运行请求时,它会命中夹具文件而不是真正的服务。
我的问题是,每次运行测试时session_id 都会发生变化。这意味着,根据 webmock,发出的请求与存根的请求不匹配,从而导致测试失败。在控制器测试中,我可以直接访问会话,并根据需要更改/存根任何我想要的东西。通过集成测试,我无法直接访问会话,因此我无法使用 Rails 为测试生成的任何 session_id。有谁知道修改/存根用于集成测试的 session_id 达到预期效果的好方法?我正在考虑一些不太受欢迎的方法(例如,涉及为那些集成测试放弃 vcr gem),但我更愿意找到一种方法让 session_id 成为一些预期值。
使用 Capybara/Poltergeist/phantomjs 在 Rails 5.1 应用程序上进行测试。
【问题讨论】:
标签: ruby-on-rails capybara integration-testing sessionid webmock