1

我正在使用 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 进行测试)

4

2 回答 2

1

我很想听听其他人对此的看法 - 我不相信 Cucumber 是适合这项工作的工具,因为您是从用户交互的角度描述功能,听起来您对渐进增强的实施将导致在基本相同的用户交互中。

除此之外,我认为您可能需要考虑在页面本身上构建某种测试挂钩来帮助解决这个问题。在不知道您的确切情况的情况下很难说什么,但可能是以下之一:

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

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

例如,* 如果 javascript 打开一个模态对话框而不是跟随一个指向新页面的链接,请对此进行测试。* 如果 javascript 提交了一个表单并更新了一个值,那么测试一下。

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

于 2012-08-08T17:07:41.360 回答