Capybara/Selenium/ Rspecを使用して JavaScript テストを実行する方法については、多くの例があり、次のようにテストを記述できます。
it "does something", :js => true do
...
end
ただし、minitest では、セレンにテストを実行するように指示する 2 番目のパラメーターを渡すことはできません。
これをどのように行うことができるかについて誰にもアイデアがありますか?
Capybara/Selenium/ Rspecを使用して JavaScript テストを実行する方法については、多くの例があり、次のようにテストを記述できます。
it "does something", :js => true do
...
end
ただし、minitest では、セレンにテストを実行するように指示する 2 番目のパラメーターを渡すことはできません。
これをどのように行うことができるかについて誰にもアイデアがありますか?
:js
flag が行っていることは非常に単純です。現在のドライバーをデフォルト (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
いくつかの情報を更新するために、 Ruby Bindingsを備えたより強力な selenium-webdriver があります。
Rails 4 と selenium-webdriver を使用してターミナルから firefox で JavaScript をすばやくテストするには、次の 4 つの手順を実行する必要があります。
Gemfile に gem を追加する
gem 'selenium-webdriver' gem 'minitest-rails'
宝石をインストールする
バンドル インストール
テスト ケースの生成 (参照:公式ガイド)
bin/rails generate integration_test your_case_name
テスト ケースにテスト コードを書き始めます。実際にはカピバラなしで 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
また、より良い答えを得ることができるコメントに感謝します。
うーん、上記はRspecでのみ実行できると言っているように見えるドキュメントのいくつかの行に気付きました
ただし、RSpec または Cucumberを使用している場合は、より高速なものを のままにして:rack_test
、default_driver
JavaScript 対応のドライバーusing :js => true
またはを必要とするテストのみをそれぞれマークすることを検討して@javascript
ください。
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