你如何使用Minitest,Capybara,Selenium进行javascript测试?

chr*_*ris 7 selenium ruby-on-rails minitest capybara ruby-on-rails-3

有很多关于如何使用Capybara/Selenium/Rspec执行javascript测试的示例,您可以在其中编写如下测试:

it "does something", :js => true do
  ...
end
Run Code Online (Sandbox Code Playgroud)

但是,对于minitest,您无法传递第二个参数来指示selenium执行测试.

有没有人对如何做到这一点有任何想法?

Sim*_*tsa 18

什么: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
Run Code Online (Sandbox Code Playgroud)

当然,为方便起见,您可以将其抽象为模块:

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
Run Code Online (Sandbox Code Playgroud)


chr*_*ris 0

嗯,我注意到文档中的几行似乎说上面的内容只能在 Rspec 中完成

但是,如果您使用RSpec 或 Cucumber,则可能需要考虑将速度更快的保留:rack_testdefault_driver,并分别标记那些需要支持 JavaScript 的驱动程序using :js => true或 的测试@javascript

  • 你不能在 minitest 的 ```it "should do this" do``` 级别指定 :js =&gt; true 。仅在主“描述”块中。 (2认同)