8

Capybara/Selenium/ Rspecを使用して JavaScript テストを実行する方法については、多くの例があり、次のようにテストを記述できます。

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

ただし、minitest では、セレンにテストを実行するように指示する 2 番目のパラメーターを渡すことはできません。

これをどのように行うことができるかについて誰にもアイデアがありますか?

4

4 に答える 4

18

:jsflag が行っていることは非常に単純です。現在のドライバーをデフォルト (rack-test) から、JavaScript の実行をサポートする別のドライバー (selenium、webkit) に切り替えます。ミニテストでも同じことができます:

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
于 2012-11-08T19:43:17.663 に答える
0

いくつかの情報を更新するために、 Ruby Bindingsを備えたより強力な selenium-webdriver があります。

Rails 4 と selenium-webdriver を使用してターミナルから firefox で JavaScript をすばやくテストするには、次の 4 つの手順を実行する必要があります。

  1. Gemfile に gem を追加する

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

  2. 宝石をインストールする

    バンドル インストール

  3. テスト ケースの生成 (参照:公式ガイド)

    bin/rails generate integration_test your_case_name

  4. テスト ケースにテスト コードを書き始めます。実際にはカピバラなしで Ruby で記述できます。カピバラでケースを記述するには、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 minitest をスムーズに操作する方法に関するリソースが不足しているようです。私は単純なプロジェクトを作成しました。これが、誰もが迅速かつ簡単に始めるのに役立つことを願っています: Rails Selenium Working Case

また、より良い答えを得ることができるコメントに感謝します。

于 2015-08-28T17:31:21.060 に答える
0

うーん、上記はRspecでのみ実行できると言っているように見えるドキュメントのいくつかの行に気付きました

ただし、RSpec または Cucumberを使用している場合は、より高速なものを のままにして:rack_testdefault_driverJavaScript 対応のドライバーusing :js => trueまたはを必要とするテストのみをそれぞれマークすることを検討して@javascriptください。

于 2011-04-13T20:29:56.580 に答える
0

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
于 2011-10-17T23:04:42.023 に答える