Как мне не выполнить шаг в функциональном тесте с Capybara-Webkit, если на странице есть ошибка JavaScript? - PullRequest
3 голосов
/ 09 февраля 2012

Я использую Cucumber, Capybara и Capybara-webkit для тестирования различных сценариев в моем приложении Ruby on Rails.

Есть ли способ обнаружить любую ошибку JavaScript на странице во время выполнения сценариев и не пройти тест?Мы используем эти тесты, чтобы убедиться, что мы не нарушаем функциональность (включая JavaScript) между изменениями в рамках наших автоматических тестовых прогонов.

Я вижу сбои в результатах теста, но это не такпровалить тест:

http://127.0.0.1:54928/...|16|ReferenceError: Can't find variable: $
http://127.0.0.1:54928/...|16|ReferenceError: Can't find variable: $
...

Спасибо!

Обновление: Один из найденных способов - создать шаг, который пытается выполнить какой-то JavaScript, который был бы возможенесли предыдущих ошибок не было.В этом случае я получу ошибку, подобную этой:

Javascript failed to execute (Capybara::Driver::Webkit::WebkitInvalidResponseError)
./features/step_definitions/....rb:19:in `/^I should not see any JavaScript errors$/'
features/....feature:34:in `Then I should not see any JavaScript errors'

Есть ли лучший способ?

Ответы [ 4 ]

3 голосов
/ 23 марта 2012

Да, вы можете получить доступ ко всем сообщениям консоли с помощью page.driver.console_messages или только к сообщениям об ошибках с помощью page.driver.error_messages.

Чтобы проверить отсутствие ошибок JavaScript, я бы предложил что-то из следующего:

Then /^I should see no Java\-Script errors$/ do
  page.driver.error_messages.length.should == 0
end

Примечание: capybara-webkit также включает в себя совпадение :have_errors для написания хорошего page.should_not have_errors.К сожалению, в текущей версии это не работает (по крайней мере, для меня; см. Также: https://github.com/thoughtbot/capybara-webkit/pull/201)

0 голосов
/ 22 ноября 2013

capybara-webkit, кажется, всегда имеет два поддельных сообщения в нашей среде.Я пытался быть как можно более конкретным и отфильтровывать их, но следующее работает для того, чтобы мы автоматически потерпели неудачу при обнаружении ошибки JavaScript с помощью capybara-webkit:

AfterStep do
  if webkit?
    real_error_messages = []
    page.driver.error_messages.each_with_index do |e, i|
      # first two messages appear to be bogus, always.
      if (e[:line_number] == 0) && (e[:source].eql? 'undefined') && (e[:message].eql? 'TypeError: \'null\' is not an object') && i <= 1
        # discard message
      else
        real_error_messages << e
      end
    end

    raise "Javascript errors: #{real_error_messages}" if real_error_messages.length > 0
  end
end

Где webkit?:

def webkit?()
  [:webkit, :webkit_debug].include? Capybara.javascript_driver
end

Полный смысл здесь

0 голосов
/ 13 февраля 2012

Хотя уведомление об ошибках JavaScript может иногда оказаться полезным, вам следует попытаться проверить фактическое поведение JavaScript.Если есть ошибка JavaScript, это должно проявиться как сбойный сценарий.

0 голосов
/ 09 февраля 2012

Лучший способ запустить на каждом шаге «покажи мне страницу» и проверить свою веб-консоль.Затем вы можете разместить console.log в своем коде.где вы делаете действия для выбранных шагов.

...