在 Capybara 中点击一个 link with data-method="POST"
Clicking a link with data-method="POST" in Capybara
似乎无法使用 Capybara 发送 POST 请求,即使这应该是用户操作的直接结果。例如,link 和 data-method="POST"
,然后单击 link 会为我引发服务器错误:
No route matches [GET] "blabla"
这是有道理的,因为它应该是一个 PUT 请求(如其属性中所指定)。找到了一些关于 Capybara 无法直接 发送 POST 请求,但是 none 关于 link 具有 data-method
属性集的相关帖子.
使用“data-method”依赖于使用 the Rails Unobtrusive Javascript Driver 创建一个离散的形式,并 post 它到服务器。如果 Rails UJS 未正确 运行ning 或者客户端不支持 JS,将发送一个普通的 GET 请求 - 毕竟它只是一个 link 并且当你发送 GET 请求时浏览器点击 links.
Capybara 默认使用不 运行 javascript 的 RackTest 驱动程序。它实际上不是真正的浏览器 - 它更像是浏览器模拟器 运行 在 XML 解析器之上。
您需要使用 button_to
而不是创建一个实际的表单元素并且根本不依赖 JS 或 change the Capybara driver to a driver that runs javascript such as Selenium Webdriver or Apparition.
似乎无法使用 Capybara 发送 POST 请求,即使这应该是用户操作的直接结果。例如,link 和 data-method="POST"
,然后单击 link 会为我引发服务器错误:
No route matches [GET] "blabla"
这是有道理的,因为它应该是一个 PUT 请求(如其属性中所指定)。找到了一些关于 Capybara 无法直接 发送 POST 请求,但是 none 关于 link 具有 data-method
属性集的相关帖子.
使用“data-method”依赖于使用 the Rails Unobtrusive Javascript Driver 创建一个离散的形式,并 post 它到服务器。如果 Rails UJS 未正确 运行ning 或者客户端不支持 JS,将发送一个普通的 GET 请求 - 毕竟它只是一个 link 并且当你发送 GET 请求时浏览器点击 links.
Capybara 默认使用不 运行 javascript 的 RackTest 驱动程序。它实际上不是真正的浏览器 - 它更像是浏览器模拟器 运行 在 XML 解析器之上。
您需要使用 button_to
而不是创建一个实际的表单元素并且根本不依赖 JS 或 change the Capybara driver to a driver that runs javascript such as Selenium Webdriver or Apparition.