使用Capybara逐步增强功能测试

时间:2012-07-26 10:20:28

标签: testing cucumber capybara progressive-enhancement

我正在使用Capybara在逐步增强的网站上测试功能。假设我的功能是围绕位置层次结构进行导航。非JavaScript版本涉及在我们点击不同位置时获取新版本的页面。增强的javascript版本会打开隐藏的元素,或通过Ajax加载新信息。

我首先为非javascript版本编写测试,看起来像这样:

When I visit the page for "UK"
And I click "London"
Then I should see the information for "London"

使用默认的机械化驱动程序,测试失败,我开发了该功能,然后测试通过。

然后我为javascript版本创建一个相同的测试,用@javascript标记。它使用javascript驱动程序运行测试,并且该测试通过,因为该功能已经实现。 (它正在通过非js流程)。但是,我希望此时测试的javascript版本失败,因为该功能尚未使用Javascript进行增强。

所以我正在寻找一个好的策略来确定是否有来自服务器的整个新页面,并确保该功能的两个版本都能正常工作。 (我计划将它与pushState集成,因此不会对更改过的URL进行测试)

2 个答案:

答案 0 :(得分:1)

我很想听听别人对此的看法 - 我不相信Cucumber是适合这项工作的工具,因为你从用户互动的角度描述了功能,这听起来像是你的渐进式实现增强将导致基本相同的用户交互。

除此之外,我认为你可能想考虑在页面本身的某种测试钩子中构建它来帮助解决这个问题。很难说不知道你的具体情况,但可能是其中一个:

  • 页面的脚本增强版本可以向DOM添加一些元素,表示增强功能处于活动状态,或者表示数据来自AJAX请求而非页面加载。
  • 您可以在每次加载时生成一个随机页面标识符(来自服务器)(例如新的GUID),将其嵌入到DOM中并断言它在交互后没有改变(在增强版本上)。这将是实现既定目标的一种非常简单的方法(“确定是否有来自服务器的全新页面”)

答案 1 :(得分:0)

为什么您的javascript“增强版”与非增强版的工作方式相同?使用@javascript进行黄瓜测试时应进行测试,以确保增强功能正常运行。

例如, *如果javascript打开模态对话框而不是跟随指向新页面的链接,请测试它。 *如果javascript提交表单并更新值,请测试它。

如果在没有javascript支持的情况下运行,这些测试将失败。