Запрос $ .ajax нарушает спецификации js: true в rspec - PullRequest
0 голосов
/ 02 января 2019

У меня есть спецификация, которая выглядит следующим образом:

scenario "Brand likes a comment", js: true do
  visit post_path(question, as: brand)

  within("#comment_#{comment.id}") do
    click_on "Like"
  end

  expect(page).to have_text "Like •1"
end

Я недавно добавил страницу с графиком chart.js и загружаю данные для этого графика с помощью запроса ajax, который выглядит следующим образом:

  $.ajax({
    url: "/admin/reporting/weekly_new_users",
    type: "get",
    dataType: "json",
    cache: false,
    success: function(response){
      var ctx = document.getElementById("weeklyUsers");
      new Chart(ctx, {
          type: 'line',
          data: {
              labels: response.weekly_users.map(arr => arr[0]),
              datasets: [{
                  label: '# of New Users',
                  data: response.weekly_users.map(arr => arr[1]),
                  backgroundColor: [
                      'rgba(255, 99, 132, 0.2)',
                  ],
                  borderColor: [
                      'rgba(255,99,132,1)',
                  ],
                  borderWidth: 1
              }]
          },
      });
    }
  })
};

Этот ajax-запрос вызывает сбой моей спецификации с js: true, со следующим сообщением об ошибке:

Failure/Error: raise ActionController::RoutingError, "No route matches [#{env['REQUEST_METHOD']}] #{env['PATH_INFO'].inspect}"

     ActionController::RoutingError:
       No route matches [GET] "/likes/1"

Когда я комментирую ajax-запрос, спецификация проходит. Не уверен, что вызывает это, какие-либо идеи?

1 Ответ

0 голосов
/ 02 января 2019

Вы указали, что используете capybara-webkit в качестве драйвера для JS-тестов. Если это действительно так, то, скорее всего, вы не полностью заполняете и переносите свой JS-код для совместимости с ним. Это приводит к тому, что у вас есть ошибки (неподдерживаемые JS) в объединенных ресурсах, передаваемых вашему приложению, что препятствует обработке некоторых JS. В этом случае я предполагаю, что ваша Like ссылка / кнопка обычно обрабатывается JS (возможно, вы установили метод для ссылки на Rails для использования - POST, PUT, PATCH и т. Д.), Но ошибки в JS предотвращают обработчики JS не присоединяются к ссылке / кнопке.

Что касается того, что в вашем $.ajax вызывает проблемы, одна возможность состоит в том, что вы используете функции стрелок, которые не поддерживаются capybara-webkit (это примерно эквивалентно 6-7-летней версии Safari). Чтобы продолжить использовать capybara-webkit, вам нужно убедиться, что весь ваш JS переносится и заполняется для совместимости с действительно старыми браузерами. Гораздо лучшим решением, хотя, возможно, и более трудоемким, является переключение на использование Selenium с Chrome или Firefox без головы для тестирования. Вы получаете не только возможность тестировать в современных браузерах, которые фактически используют ваши пользователи, но и возможность легко переключаться между головой и безголовым при попытке отладки проблем.

...