Ruby on rails 在从“jquery\u ujs”移动到“rails ujs”之后,为什么jquery对象没有在测试中初始化?
在从Ruby on rails 在从“jquery\u ujs”移动到“rails ujs”之后,为什么jquery对象没有在测试中初始化?,ruby-on-rails,ruby-on-rails-5,rails-ujs,Ruby On Rails,Ruby On Rails 5,Rails Ujs,在从jquery\u ujs迁移到rails ujs之后,某些JS测试失败了,并且很难调试 问题似乎是Jquery对象只在序列中的第一个测试中初始化。在我的开发环境中,一切正常 升级到Rails 5.1后,一切都可以使用jquery\u ujs。然后我在application.js中只做了一个更改 #added this //= require rails-ujs # removed this //= require jquery_ujs 这里有一个例子。与select2字段交互的两个几乎相同
jquery\u ujs
迁移到rails ujs
之后,某些JS测试失败了,并且很难调试
问题似乎是Jquery对象只在序列中的第一个测试中初始化。在我的开发环境中,一切正常
升级到Rails 5.1后,一切都可以使用jquery\u ujs
。然后我在application.js
中只做了一个更改
#added this
//= require rails-ujs
# removed this
//= require jquery_ujs
这里有一个例子。与select2字段交互的两个几乎相同的系统测试
it "selects recognized search strings", :js do
expect(MyRemoteSelectBuilder).to receive(:search_query).
with("recognized_string").once.
and_return(
[
id: 1,
name: "Recognized Name"
]
)
visit new_my_object_path
# triggers the select2
is_expected.to have_selector('.select2-container', visible: false)
first('.select2-container', minimum: 1).click
# do some more stuff
end
it "does not select unrecognized search strings", :js do
expect(MyRemoteSelectBuilder).to receive(:search_query).
with("unrecognized_string").once.
and_return(
[ ]
)
visit new_my_object_path
# triggers the select2
is_expected.to have_selector('.select2-container', visible: false)
first('.select2-container', minimum: 1).click
# do some more stuff
end
当一起运行时,其中一个测试将失败
expected to find css ".select2-container" but there were no matches
如果我集中精力只运行其中一个测试,它们就会通过
我考虑了这是否可能是turbolinks的问题(我不认为是因为测试有时会通过)。尽管如此,我还是尝试了各种方法用TurboLink初始化Select2,但都没有成功
(($) ->
$(document).on 'turbolinks:load', ->
InititializeSelect2.init()
return
return
) jQuery
# or
$ ->
InititializeSelect2.init()
# etc
在
rails-ujs
或jquery\u-ujs
之间是否存在可能影响测试之间jquery初始化的根本区别?我是否忽略了一些配置?调试此问题的逻辑步骤是什么 Turbolinks会影响js执行,因为ready
事件仅在初始页面加载时触发,而不是在您单击链接时触发,Turbolinks会替换文档内容。这可能是一个时间问题,尽管在javascript有机会执行之前可能会运行预期。您可以尝试使用wait_until
,它将一直等到默认的水豚超时。这通常会导致测试失败。感谢@max,不幸的是,增加超时时间,或者在预期时间之前睡觉,并不能解决问题。虽然当我进一步测试时,它是不一致的。有时通过,有时失败。您是否知道任何描述rails\u ujs
config的升级指南?我没有发现太多的细节,一定是设置不正确。不抱歉,我甚至没有意识到他们将jquery_ujs移回了核心。我会尝试禁用turbolinks,因为它会导致很多问题,特别是当与非幂等的javascript库一起使用时。您找到这个问题的答案了吗?