У меня системный тест, который не проходит, потому что в тестовой среде не запускается правильное событие ajax:success
.Событие корректно запускается при тестировании вручную в браузере.
Вот ссылка, по которой щелкает пользователь (и тест):
link_to 'Note', note_product_option_path(@product, option), remote: true, data: { note_link: true }
Событие JS (CoffeeScript), которое принимает ответи вставляет в body
документа:
NOTE_LINK = '[data-note-link="true"]'
$ ->
$('body').on 'ajax:success', NOTE_LINK, (e) ->
alert 'ajax:success'
$('.option-note').remove()
data = e.detail[2].response
$div = $('<div></div>').html(data)
.addClass('option-note')
$('body').append($div)
Вот настройки тестирования системы:
class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
include Devise::Test::IntegrationHelpers
Capybara.register_driver :headless_chrome do |app|
options = Selenium::WebDriver::Chrome::Options.new
options.add_argument('headless')
options.add_argument('window-size=1480x1680')
Capybara::Selenium::Driver.new(app, :browser => :chrome, :options => options)
end
end
В моем тесте системы:
visit product_path(option.product)
click_link 'Note'
assert_selector '.option-note', wait: 5
Этоутверждение всегда терпит неудачу, даже если оно всегда работает, когда я тестирую в браузере.alert
никогда не срабатывает и не запускается Капибарой, но всегда появляется при ручной проверке.Журнал испытаний показывает, что контроллер отображает правильный JS.
Что мне здесь не хватает?