Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在从“jquery\u ujs”移动到“rails ujs”之后,为什么jquery对象没有在测试中初始化?_Ruby On Rails_Ruby On Rails 5_Rails Ujs - Fatal编程技术网

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库一起使用时。您找到这个问题的答案了吗?