Как вы выполняете тесты JavaScript с Minitest, Capybara, Selenium? - PullRequest
7 голосов
/ 14 апреля 2011

Существует множество примеров того, как выполнять тесты javascript с помощью Capybara / Selenium / Rspec , в которых вы можете написать такой тест:

it "does something", :js => true do
  ...
end

Однако с minitest вы не можете передать второй параметр, чтобы дать команду селену выполнить тест.

У кого-нибудь есть идеи, как это можно сделать?

Ответы [ 4 ]

18 голосов
/ 08 ноября 2012

То, что делает флаг :js, очень просто. Он переключает текущий драйвер со стандартного (стойка-тест) на другой, поддерживающий выполнение JavaScript (selenium, webkit) Вы можете сделать то же самое в minitest:

require "minitest/autorun"

class WebsiteTest < MiniTest::Unit::TestCase
  def teardown
    super
    Capybara.use_default_driver
  end

  def test_with_javascript
    Capybara.current_driver = :selenium
    visit "/"
    click_link "Hide"
    assert has_no_link?("Hide")
  end

  def test_without_javascript
    visit "/"
    click_link "Hide"
    assert has_link?("Hide")
  end
end

Конечно, вы можете абстрагировать это в модуль для удобства:

require "minitest/autorun"

module PossibleJSDriver
  def require_js
    Capybara.current_driver = :selenium
  end

  def teardown
    super
    Capybara.use_default_driver
  end
end

class MiniTest::Unit::TestCase
  include PossibleJSDriver
end

class WebsiteTest < MiniTest::Unit::TestCase
  def test_with_javascript
    require_js
    visit "/"
    click_link "Hide"
    assert has_no_link?("Hide")
  end

  def test_without_javascript
    visit "/"
    click_link "Hide"
    assert has_link?("Hide")
  end
end
0 голосов
/ 28 августа 2015

Просто, чтобы обновить некоторую информацию, теперь есть более мощный селен-веб-драйвер с Ruby Bindings .

Для быстрого тестирования JavaScript на firefox из терминала с помощью Rails 4 и selenium-webdriver,вам нужно выполнить 4 шага ниже:

  1. Добавить драгоценный камень в свой Gemfile

    gem 'selenium-webdriver' gem 'minitest-rails'

  2. Установить gem

    установить пакет

  3. Создать тестовый набор (Ref: Официальное руководство )

    bin/ rails Генерировать integra_test your_case_name

  4. Начните писать тестовый код в вашем тестовом примере.На самом деле вы можете написать это в рубине без Капибары, чтобы написать кейс с Капибарой, вы можете обратиться к Капибара в Github

Пример минимального теста:

# create a driver
driver = Selenium::WebDriver.for :firefox
# navigate to a page
driver.navigate.to 'url_to_page'
# get element with class box
box = driver.find_element(:css, '.box')

# check width
# get width by execute JavaScript
assert_equal 100, driver.execute_script('return $(arguments[0]).width()', box)

В настоящее время, похоже, не хватает ресурсов для того, чтобы гладко работать с selenium-webdriver, CI-сервером (Jenkins) и Rails, я создал простой проект и надеюсь, что он поможет любому начать быстро и легко: Rails Selenium Working Case

Также оцените комментарии, которые позволили мне сделать лучший ответ.

0 голосов
/ 18 октября 2011

https://github.com/wojtekmach/minitest-metadata, кажется, дал решение именно этому.

Вы можете сделать следующее:

describe "something under test" do
  it "does not use selenium for this test" do
    visit "/"
    assert body.has_content?("Hello world")
  end

  it "does use selenium for this test", :js => true do
    visit "/"
    click_link "Hide" # a link that uses a javascript click event, for example
    assert body.has_no_link?("Hide")
  end
end
0 голосов
/ 14 апреля 2011

Хмм. Я заметил пару строк в документах, которые, кажется, говорят, что вышеупомянутое можно сделать только в Rspec

Однако, если вы используете RSpec или Cucumber , вы можете вместо этогохотите оставить более быстрый :rack_test как default_driver и отметить только те тесты, для которых требуется драйвер с поддержкой JavaScript using :js => true или @javascript соответственно.

...