0

我正在尝试在我的 Rails 6.1 应用程序的几个页面上引入 Turbo Drive。

Ḯ 在将一些遗留的 JQuery 插件初始化从$(document).ready()调用移动到document.addEventListener('turbo:load', ..)调用之后,它已经按预期得到了。

但是,当我运行 Capybara 功能规范时,我可以从失败规范的屏幕截图中看到,比如 JQuery 插件没有像应有的那样初始化。测试失败的一个典型示例:

scenario 'element is visible', :js do
  visit(my_page_path)
  expect(page.find(#some-jquery-plugin-created-element).text).to \
         eq 'some expected text from the plugin element'
end

谁能帮我理解为什么这在功能规范中不起作用?在我看来,turbo:load事件根本没有被触发。


我试过的

检查浏览器日志

我启用登录驱动程序:

Selenium::WebDriver::Remote::Capabilities.chrome( "goog:loggingPrefs": { browser: 'ALL' } ).

.. 但是page.driver.browser.manage.logs.get(:browser)在失败的调用之前expect调用只会返回一个空数组。

也许我做错了?

确保 Capybara 在页面完成加载之前不会超时

Capybara.default_max_wait_time = 10

4

1 回答 1

1

通过写下您的期望,例如

expect(page.find(#some-jquery-plugin-created-element).text).to \
         eq 'some expected text from the plugin element'

您正在击败 Capybaras 重试功能,这将导致动态页面中的大量测试失败。您应该“永远”将基本的 RSpec 匹配器(eq 等)与 Capybara 相关的对象一起使用。

在您的情况下,find调用正在等待匹配元素存在,然后获取其文本并检查它。这将失败,因为当元素第一次添加到页面时,它可能还没有完整的文本内容。相反,您应该使用 Capybara 提供的匹配器,它将使用 Capybara 等待匹配的行为

expect(page.find(#some-jquery-plugin-created-element)).to have_text('some expected text from the plugin element')
于 2022-02-17T16:00:27.097 回答