在我的 Rails 应用程序中,我有一组黄瓜验收测试,用于测试我的应用程序的各个页面。使用 cucumber 标记特定测试(场景)@javascript
会导致该场景使用 JavaScript 驱动程序而不是不支持 JavaScript 的更简单驱动程序运行。
有没有一种简单的方法可以让我的测试确定它们当前是使用支持 JavaScript 的驱动程序还是不支持 JavaScript 的驱动程序运行的?我想要这个,以便我可以使我的测试在启用 JavaScript 的情况下运行时的行为略有不同。
在我的 Rails 应用程序中,我有一组黄瓜验收测试,用于测试我的应用程序的各个页面。使用 cucumber 标记特定测试(场景)@javascript
会导致该场景使用 JavaScript 驱动程序而不是不支持 JavaScript 的更简单驱动程序运行。
有没有一种简单的方法可以让我的测试确定它们当前是使用支持 JavaScript 的驱动程序还是不支持 JavaScript 的驱动程序运行的?我想要这个,以便我可以使我的测试在启用 JavaScript 的情况下运行时的行为略有不同。
如果有人感兴趣,我查看了Capybara 的文档并找到了另一种可能的解决方案:
if Capybara.current_driver == Capybara.javascript_driver
# Supports JavaScript
else
# Doesn't support JavaScript
end
这有点令人讨厌,但这就是我的目标。想我是从某个地方的要点那里得到的,很抱歉我失去了它的链接,但至少它很简单:
def javascript_test?
[:selenium, :webkit, :chrome, :poltergeist].include?(Capybara.current_driver)
end
如果您定义(或在 Gemfile 中要求)其他启用 js 的驱动程序,则必须将它们添加到此列表中。
从这个答案看来,最简单的方法是在Before
挂钩中设置一个实例变量:
Before('@javascript') do
@javascript = true
end
然后,您可以通过检查该实例变量的值来测试场景是否在步骤定义中被标记:
When /^I go to the homepage$/ do
if @javascript
...
else
...
end
end
我已经对此进行了测试,它似乎有效。
您也可以简单地探测该功能并挽救任何异常。这可能是最精确和兼容的方法:
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