Тест Cucumber / Capybara с JavaScript не выполняется только для одного теста, который также использует ActionCable и Redis - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть приложение Rails (5.2.3), в которое я пытаюсь добавить функцию чата, чтобы пользователи могли общаться друг с другом. Я не полностью реализовал эту функцию, так как я пытаюсь писать тесты так, как я go (если я не знаю, как писать тесты для того, что я пытаюсь тестировать, я часто делаю это так). До сих пор у меня есть две области соответствующей страницы приложения, выложенные в HTML для отправки и приема сообщений чата, JavaScript, который выполняет остальную часть страницы, JavaScript, которая предназначена для запуска на странице загрузка, которая заставляет регионы для функции чата заполнять правильное пространство страницы, JavaScript, который слушает textarea для чатов для отправки, и JavaScript, который слушает широковещательные чаты. Соответствующий тест имитирует то, что я могу сделать на данный момент в версии для разработчиков: введите текст в поле отправки <textarea>, нажмите клавишу возврата и увидите сообщение в <div>, в котором содержатся чаты. Журналы разработки показывают, что сообщение попадает на сервер redis и пересылается, как и ожидалось.

Сбой теста инструмента чата. Если я открою консоль в браузере, в котором выполняются тесты, я не увижу ни ошибок, ни доказательств того, что JavaScript на странице выполняется для этого теста (все остальные тесты, все из которых помечены @javascript, выполняются правильно). Если я добавлю достаточно задержки, я увижу, что оба метода, которые я использовал для отправки клавиши enter на textarea, работают (в этом случае курсор перемещается), но ожидаемое поведение на странице (текст отправляется на сервер redis для широковещательной рассылки) не происходит.

В журнале тестов нет доказательств того, что сервер ActionCable запускается. У меня установлена ​​capybara-chromedriver-logger, но я не вижу никаких признаков регистрации, которую я ожидал бы.

Если в моем вопросе отсутствует информация, которая, по вашему мнению, будет полезна при ответе, пожалуйста, спросите.

CoffeeScript, который я написал для элементов чата (который выполняется в разработке, но не в тесте):

# Behavior for driving the sizing of the heckle forum window.
#= require_self
#= require common
class ChatWindowDriver
  @setChatWidths: () ->
    curWidth = 0
    (curWidth += $('td[data-node="'+n+'"]').width() for n in ["5", "2", "1", "3", "7"])
    curWidth -= 20 # Because of the margins we want
    $('div[id^="chat"]').each (index, element) =>
      $(element).css("width", curWidth)
    $('textarea#chat-text').each (index, element) =>
      $(element).css("width", curWidth)
    headerHeight = 0
    $('td.chat-header').each (index, element) =>
      headerHeight += $(element).height()
    $('div#chat-header-anchor').css('height', headerHeight)
    receiptHeight = 0
    $('tr.chat-receipt').each (index, element) =>
      receiptHeight += $(element).height()
    $('div#chats-received').css('height', receiptHeight)
    sendingHeight = 0
    $('tr.chat-sending').each (index, element) =>
      sendingHeight += $(element).height()
    $('div#chat-send').css('height', sendingHeight)

  @sendChat: (event) ->
    if event.keyCode is 13 # return/enter => send
      Chats.forum.heckle event.target.value
      event.target.value = ''
      event.preventDefault()

$ ->
  console.log 'can we see this message?'
  ChatWindowDriver.setChatWidths()
  $('#chat-text').on 'keypress', (e) => ChatWindowDriver.sendChat(e)

Gemfile.lock:

GEM
  remote: https://rubygems.org/
  specs:
    actioncable (5.2.4)
      actionpack (= 5.2.4)
      nio4r (~> 2.0)
      websocket-driver (>= 0.6.1)
    actionmailer (5.2.4)
      actionpack (= 5.2.4)
      actionview (= 5.2.4)
      activejob (= 5.2.4)
      mail (~> 2.5, >= 2.5.4)
      rails-dom-testing (~> 2.0)
    actionpack (5.2.4)
      actionview (= 5.2.4)
      activesupport (= 5.2.4)
      rack (~> 2.0)
      rack-test (>= 0.6.3)
      rails-dom-testing (~> 2.0)
      rails-html-sanitizer (~> 1.0, >= 1.0.2)
    actionview (5.2.4)
      activesupport (= 5.2.4)
      builder (~> 3.1)
      erubi (~> 1.4)
      rails-dom-testing (~> 2.0)
      rails-html-sanitizer (~> 1.0, >= 1.0.3)
    activejob (5.2.4)
      activesupport (= 5.2.4)
      globalid (>= 0.3.6)
    activemodel (5.2.4)
      activesupport (= 5.2.4)
    activerecord (5.2.4)
      activemodel (= 5.2.4)
      activesupport (= 5.2.4)
      arel (>= 9.0)
    activestorage (5.2.4)
      actionpack (= 5.2.4)
      activerecord (= 5.2.4)
      marcel (~> 0.3.1)
    activesupport (5.2.4)
      concurrent-ruby (~> 1.0, >= 1.0.2)
      i18n (>= 0.7, < 2)
      minitest (~> 5.1)
      tzinfo (~> 1.1)
    addressable (2.7.0)
      public_suffix (>= 2.0.2, < 5.0)
    arel (9.0.0)
    backports (3.15.0)
    bcrypt (3.1.13)
    bindex (0.8.1)
    builder (3.2.4)
    byebug (11.0.1)
    cancancan (3.0.1)
    capybara (3.29.0)
      addressable
      mini_mime (>= 0.1.3)
      nokogiri (~> 1.8)
      rack (>= 1.6.0)
      rack-test (>= 0.6.3)
      regexp_parser (~> 1.5)
      xpath (~> 3.2)
    capybara-chromedriver-logger (0.2.1)
      capybara
      colorize
    capybara-screenshot (1.0.24)
      capybara (>= 1.0, < 4)
      launchy
    childprocess (3.0.0)
    coderay (1.1.2)
    coffee-rails (5.0.0)
      coffee-script (>= 2.2.0)
      railties (>= 5.2.0)
    coffee-script (2.4.1)
      coffee-script-source
      execjs
    coffee-script-source (1.12.2)
    colorize (0.8.1)
    concurrent-ruby (1.1.5)
    crass (1.0.5)
    cucumber (3.1.2)
      builder (>= 2.1.2)
      cucumber-core (~> 3.2.0)
      cucumber-expressions (~> 6.0.1)
      cucumber-wire (~> 0.0.1)
      diff-lcs (~> 1.3)
      gherkin (~> 5.1.0)
      multi_json (>= 1.7.5, < 2.0)
      multi_test (>= 0.1.2)
    cucumber-core (3.2.1)
      backports (>= 3.8.0)
      cucumber-tag_expressions (~> 1.1.0)
      gherkin (~> 5.0)
    cucumber-expressions (6.0.1)
    cucumber-rails (2.0.0)
      capybara (>= 2.12, < 4)
      cucumber (>= 3.0.2, < 4)
      mime-types (>= 2.0, < 4)
      nokogiri (~> 1.8)
      railties (>= 4.2, < 7)
    cucumber-tag_expressions (1.1.1)
    cucumber-wire (0.0.1)
    daemons (1.3.1)
    database_cleaner (1.7.0)
    delayed_job (4.1.8)
      activesupport (>= 3.0, < 6.1)
    delayed_job_active_record (4.1.4)
      activerecord (>= 3.0, < 6.1)
      delayed_job (>= 3.0, < 5)
    diff-lcs (1.3)
    docile (1.3.2)
    email_spec (2.2.0)
      htmlentities (~> 4.3.3)
      launchy (~> 2.1)
      mail (~> 2.7)
    erubi (1.9.0)
    execjs (2.7.0)
    factory_bot (5.1.1)
      activesupport (>= 4.2.0)
    factory_bot_rails (5.1.1)
      factory_bot (~> 5.1.0)
      railties (>= 4.2.0)
    faker (2.8.1)
      i18n (>= 1.6, < 1.8)
    ffi (1.11.3)
    formatador (0.2.5)
    gherkin (5.1.0)
    globalid (0.4.2)
      activesupport (>= 4.2.0)
    guard (2.16.1)
      formatador (>= 0.2.4)
      listen (>= 2.7, < 4.0)
      lumberjack (>= 1.0.12, < 2.0)
      nenv (~> 0.1)
      notiffany (~> 0.0)
      pry (>= 0.9.12)
      shellany (~> 0.0)
      thor (>= 0.18.1)
    guard-compat (1.2.1)
    guard-rspec (4.7.3)
      guard (~> 2.1)
      guard-compat (~> 1.1)
      rspec (>= 2.99.0, < 4.0)
    htmlentities (4.3.4)
    i18n (1.7.0)
      concurrent-ruby (~> 1.0)
    jbuilder (2.9.1)
      activesupport (>= 4.2.0)
    jquery-rails (4.3.5)
      rails-dom-testing (>= 1, < 3)
      railties (>= 4.2.0)
      thor (>= 0.14, < 2.0)
    json (2.3.0)
    launchy (2.4.3)
      addressable (~> 2.3)
    lazy_priority_queue (0.1.1)
    libnotify (0.9.4)
      ffi (>= 1.0.11)
    libv8 (3.16.14.19)
    listen (3.1.5)
      rb-fsevent (~> 0.9, >= 0.9.4)
      rb-inotify (~> 0.9, >= 0.9.7)
      ruby_dep (~> 1.2)
    loofah (2.4.0)
      crass (~> 1.0.2)
      nokogiri (>= 1.5.9)
    lumberjack (1.0.13)
    mail (2.7.1)
      mini_mime (>= 0.1.1)
    marcel (0.3.3)
      mimemagic (~> 0.3.2)
    method_source (0.9.2)
    mime-types (3.3)
      mime-types-data (~> 3.2015)
    mime-types-data (3.2019.1009)
    mimemagic (0.3.3)
    mini_mime (1.0.2)
    mini_portile2 (2.4.0)
    minitest (5.13.0)
    multi_json (1.14.1)
    multi_test (0.1.2)
    nenv (0.3.0)
    nio4r (2.5.2)
    nokogiri (1.10.7)
      mini_portile2 (~> 2.4.0)
    notiffany (0.1.3)
      nenv (~> 0.1)
      shellany (~> 0.0)
    pg (1.1.4)
    pry (0.12.2)
      coderay (~> 1.1.0)
      method_source (~> 0.9.0)
    public_suffix (4.0.1)
    puma (4.3.1)
      nio4r (~> 2.0)
    rack (2.0.8)
    rack-test (1.1.0)
      rack (>= 1.0, < 3)
    rails (5.2.4)
      actioncable (= 5.2.4)
      actionmailer (= 5.2.4)
      actionpack (= 5.2.4)
      actionview (= 5.2.4)
      activejob (= 5.2.4)
      activemodel (= 5.2.4)
      activerecord (= 5.2.4)
      activestorage (= 5.2.4)
      activesupport (= 5.2.4)
      bundler (>= 1.3.0)
      railties (= 5.2.4)
      sprockets-rails (>= 2.0.0)
    rails-dom-testing (2.0.3)
      activesupport (>= 4.2.0)
      nokogiri (>= 1.6)
    rails-html-sanitizer (1.3.0)
      loofah (~> 2.3)
    railties (5.2.4)
      actionpack (= 5.2.4)
      activesupport (= 5.2.4)
      method_source
      rake (>= 0.8.7)
      thor (>= 0.19.0, < 2.0)
    rake (13.0.1)
    rb-fsevent (0.10.3)
    rb-inotify (0.10.0)
      ffi (~> 1.0)
    record_tag_helper (1.0.0)
      actionview (~> 5.x)
    redis (4.1.3)
    ref (2.0.0)
    regexp_parser (1.6.0)
    responders (3.0.0)
      actionpack (>= 5.0)
      railties (>= 5.0)
    rgl (0.5.6)
      lazy_priority_queue (~> 0.1.0)
      stream (~> 0.5.2)
    rspec (3.9.0)
      rspec-core (~> 3.9.0)
      rspec-expectations (~> 3.9.0)
      rspec-mocks (~> 3.9.0)
    rspec-core (3.9.0)
      rspec-support (~> 3.9.0)
    rspec-expectations (3.9.0)
      diff-lcs (>= 1.2.0, < 2.0)
      rspec-support (~> 3.9.0)
    rspec-mocks (3.9.0)
      diff-lcs (>= 1.2.0, < 2.0)
      rspec-support (~> 3.9.0)
    rspec-rails (3.9.0)
      actionpack (>= 3.0)
      activesupport (>= 3.0)
      railties (>= 3.0)
      rspec-core (~> 3.9.0)
      rspec-expectations (~> 3.9.0)
      rspec-mocks (~> 3.9.0)
      rspec-support (~> 3.9.0)
    rspec-support (3.9.0)
    ruby_dep (1.5.0)
    ruby_http_client (3.3.0)
    rubyzip (2.0.0)
    sass-rails (6.0.0)
      sassc-rails (~> 2.1, >= 2.1.1)
    sassc (2.2.1)
      ffi (~> 1.9)
    sassc-rails (2.1.2)
      railties (>= 4.0.0)
      sassc (>= 2.0)
      sprockets (> 3.0)
      sprockets-rails
      tilt
    selenium-webdriver (3.142.6)
      childprocess (>= 0.5, < 4.0)
      rubyzip (>= 1.2.2)
    sendgrid-ruby (6.0.0)
      ruby_http_client (~> 3.3.0)
    shellany (0.0.1)
    shoulda (3.6.0)
      shoulda-context (~> 1.0, >= 1.0.1)
      shoulda-matchers (~> 3.0)
    shoulda-context (1.2.2)
    shoulda-matchers (3.1.3)
      activesupport (>= 4.0.0)
    simplecov (0.17.1)
      docile (~> 1.1)
      json (>= 1.8, < 3)
      simplecov-html (~> 0.10.0)
    simplecov-html (0.10.2)
    spring (2.1.0)
    spring-watcher-listen (2.0.1)
      listen (>= 2.7, < 4.0)
      spring (>= 1.2, < 3.0)
    sprockets (4.0.0)
      concurrent-ruby (~> 1.0)
      rack (> 1, < 3)
    sprockets-rails (3.2.1)
      actionpack (>= 4.0)
      activesupport (>= 4.0)
      sprockets (>= 3.0.0)
    stream (0.5.2)
    therubyracer (0.12.3)
      libv8 (~> 3.16.14.15)
      ref
    thor (1.0.1)
    thread_safe (0.3.6)
    tilt (2.0.10)
    turbolinks (5.2.1)
      turbolinks-source (~> 5.2)
    turbolinks-source (5.2.0)
    tzinfo (1.2.6)
      thread_safe (~> 0.1)
    uglifier (4.2.0)
      execjs (>= 0.3.0, < 3)
    web-console (3.7.0)
      actionview (>= 5.0)
      activemodel (>= 5.0)
      bindex (>= 0.4.0)
      railties (>= 5.0)
    webdrivers (4.1.3)
      nokogiri (~> 1.6)
      rubyzip (>= 1.3.0)
      selenium-webdriver (>= 3.0, < 4.0)
    websocket-driver (0.7.1)
      websocket-extensions (>= 0.1.0)
    websocket-extensions (0.1.4)
    xpath (3.2.0)
      nokogiri (~> 1.8)

PLATFORMS
  ruby

DEPENDENCIES
  bcrypt
  byebug
  cancancan
  capybara
  capybara-chromedriver-logger
  capybara-screenshot
  coffee-rails
  cucumber-rails
  daemons
  database_cleaner
  delayed_job_active_record
  email_spec
  factory_bot_rails
  faker
  guard-rspec
  jbuilder
  jquery-rails
  launchy
  libnotify
  listen
  nokogiri
  pg
  puma
  rails (= 5.2.4)
  rb-inotify
  record_tag_helper
  redis
  responders
  rgl
  rspec
  rspec-rails
  sass-rails
  selenium-webdriver
  sendgrid-ruby
  shoulda
  simplecov
  spring
  spring-watcher-listen
  sprockets (>= 4.0)
  sprockets-rails
  therubyracer
  turbolinks
  uglifier
  web-console
  webdrivers

RUBY VERSION
   ruby 2.6.3p62

BUNDLED WITH
   2.0.2

1 Ответ

1 голос
/ 20 февраля 2020

Как правило, при тестировании можно использовать адаптер async actioncable (не адаптер redis), и вам потребуется настроить actioncable для запуска в приложении (в тестовой среде) - https://guides.rubyonrails.org/action_cable_overview.html#in -app - для запуска при запуске приложения Capybara.

...