Capybara with Poltergeist - 与数据方法的链接:删除或:补丁不触发

Capybara with Poltergeist - links with data-method :delete or :patch not triggering

使用带有 Poltergeist 的 Capybara 点击具有 data-method='delete' 属性的 link。

Capybara 继续前进,就好像 link 已被成功点击,但没有实际请求到达服务器。

测试日志显示了导致显示页面的所有步骤...但没有请求适当的 link。

它毫无问题地找到了正确的 link,并认为它已点击它。

我应该指出它不是 :remote link 并且它在开发中有效

有什么想法吗?

代码如下:

scenario "deletes a document", js: true do
  set_auto_accept_for_alert_and_confirm_dialogs
  sign_in_admin admin
  visit admin_dashboard_path
  find(:css, '#mediaDropdown').trigger('click')
  find(:css, '#documents_link').click
  find(:css, "#delete_link_#{document.id}").click
  expect(current_path).to eq admin_documents_path
  expect(Document.all.size).to eq 0
  expect(page).to have_content(I18n.t('notices.admin.documents.destroy.success'))
end

我延长了等待时间,添加了长时间睡眠并在 'delete' link 之前使用了 byebug 并尝试在控制台中调用它。


Capybara(2.10.1) - Poltergeist(1.11.0) - Rails(4.2.7.1) - jquery-rails(4.2.1) - turbolinks(5.0.1)

我打开了调试:

Capybara.register_driver :poltergeist do |app|
  Capybara::Poltergeist::Driver.new(app, { js_errors: true, debug: true })
end

这引发了 javascript 错误 Can't find variable: $ - 所以 jQuery 没有被加载。

我检查了测试日志以查看是否正在调用 javascript 文件 - 它是。

我更改了 javascript 文件以更改页面上的一些文本 - 但没有任何反应。所以问题似乎出在资产管道上。

最后,问题是因为 public\assets 文件夹中创建了一个 .sprokets-manifest 文件,否则该文件夹是空的。

我从来没有在这个应用程序上预编译资产,所以我不知道清单文件来自哪里。

删除 .sprokets-manifest 文件很容易解决。