从rspec调用时不会触发Cocoon回调

时间:2018-02-07 19:32:58

标签: ruby-on-rails ruby rspec apache-cocoon

我有一个包含嵌套字段的页面,在开发环境中运行良好。 我使用后插入回调来对字段标签进行编号。因此,这创建了“pericoop 1,pericoop 2”标签。 但是,当我从rspec测试页面时,标签没有编号。当我save_and_open_page时,我只看到文字“pericoop”。 因此,无论出于何种原因,似乎都没有触发回调。

这是我的rspec:

  scenario 'to multiple pericopes with valid attributes', js: true do
    fill_in 'pericoop 1', with: 'Jona 1:1 - 1:10'
    click_on 'Voeg nog een pericoop toe'
    should_see 'pericoop 2'
    fill_in 'pericoop 2', with: 'Jona 2:20 - 3:3'

    submit_form

    should_see 'Jona 1:1 - 10 | Jona 2:20 - 3:3'
  end

咖啡脚本

$ ->
  $("#pericopes").on "cocoon:after-insert", (event, added_item) ->
    num = $("#pericopes div.nested-fields").length
    added_item.find('.control-label').html('pericoop '+num)
    console.log('pericope numbered')

从测试运行时,控制台日志没有显示任何内容(我已将Firefox配置为保留日志)。

表格:

= simple_form_for studynote, validate: true do |f|
  #pericopes
    = f.simple_fields_for :pericopes do |ff|
      .nested-fields
        = ff.input :name,
                  label: "#{t('simple_form.labels.pericopes.name')} 1",
                  placeholder: 'Genesis 1:1-3:21',
                  autofocus: true
        = link_to_remove_association 'remove pericope', ff
    .links
      = link_to_add_association t('add_pericope'), f, :pericopes
  = f.input :title
  = f.input :note, :input_html => { :rows => 20 }    
  = f.button :submit, class: "btn-primary"

部分:

.nested-fields
  = f.input :name,
            label: "#{ t('simple_form.labels.pericopes.name') }",
            placeholder: 'Genesis 1:1-3:21',
            autofocus: true
  = link_to_remove_association 'remove pericope', f
编辑,我已经重构了表格,并且部分地干掉了一些代码,希望这可以解决问题,但还没有运气。 部分_pericope_fields.html.haml

.nested-fields
  - index = index
  = f.input :name,
            label: "#{ t('simple_form.labels.pericopes.name') } #{index}",
            placeholder: 'Genesis 1:1-3:21',
            autofocus: true
  = link_to_remove_association 'remove pericope', f

表单,_ form.html.haml

= simple_form_for studynote, validate: true do |f|
  #pericopes
    = f.simple_fields_for :pericopes do |pericope|
      = render 'pericope_fields', f: pericope, index: 1
    .links
      = link_to_add_association t('add_pericope'), f, :pericopes, class: 'new btn-xs'
  = f.input :title
  = f.input :note, :input_html => { :rows => 20 }
  = f.button :submit, class: "btn-primary"

我看过这篇文章300,但回调根本没有用。 另一篇文章(我现在找不到),其中规范没有包含js:true。但这不是问题所在。

任何想法在这里可能出错?

1 个答案:

答案 0 :(得分:0)

不确定您是否特别配置它,但测试取决于编译资产的存在。

所以要么,你曾经编译过资产然后又忘了再做,所以application.js没有包含最新版本,或者你从未编译过资产。

我只是通过编辑config/environments/test.rb文件并添加

来禁用测试中编译的资产
config.assets.debug = true
config.assets.digest = true
config.assets.raise_runtime_errors = true

然后你的测试似乎按预期工作(两个测试仍然失败:删除学习笔记和删除pericopes,但我猜这是其他的东西)。

  

注意:我还必须编辑您的种子,因为在稍后的迁移nr_of_verses中重命名了一个字段nrofverses