在我的Rails应用程序中,我有一组黄瓜验收测试,可以测试我的应用程序的各个页面。使用黄瓜,使用@javascript
标记特定测试(方案)会导致该方案使用JavaScript驱动程序而不是不支持JavaScript的简单驱动程序运行。
我的测试是否有一种简单的方法可以确定它们当前是使用支持JavaScript的驱动程序运行还是不运行?我希望这样,如果在启用JavaScript的情况下运行,我可以使我的测试行为略有不同。
答案 0 :(得分:27)
如果有人对此感兴趣,我会查看documentation for Capybara并找到另一种可能的解决方案:
if Capybara.current_driver == Capybara.javascript_driver
# Supports JavaScript
else
# Doesn't support JavaScript
end
答案 1 :(得分:7)
这有点令人讨厌,但这就是我的目标。想想我从某个地方得到了它,对不起,我失去了它的链接,但至少它非常简单:
def javascript_test?
[:selenium, :webkit, :chrome, :poltergeist].include?(Capybara.current_driver)
end
如果您定义(或在Gemfile中需要)其他启用了js的驱动程序,则必须将它们添加到此列表中。
答案 2 :(得分:2)
从this answer向我看来,最简单的方法就是在Before
钩子中设置一个实例变量:
Before('@javascript') do
@javascript = true
end
然后,您可以通过检查该实例变量的值来测试是否在步骤定义中标记了方案:
When /^I go to the homepage$/ do
if @javascript
...
else
...
end
end
我已经对此进行了测试,似乎有效。
答案 3 :(得分:0)
您还可以简单地探查该功能并营救任何异常。这可能是最精确和兼容的方法:
def support_js?
return @support_js unless @support.nil?
@support_js = begin
page.evaluate_script("1 + 1")
true
rescue Capybara::NotSupportedByDriverError => _err
false
end
end