【发布时间】:2012-02-22 21:24:47
【问题描述】:
我编写了一个功能来测试我的 web 应用程序的默认配置,使用 Cucumber 和 Capybara。部分功能如下所示:
And the page has a photo labeled "Device"
And the page has a checkbox labeled "Device"
And I check "Device"
And I submit the form
Then the resulting page has no photo labeled "Device"
效果很好。我希望在自己的服务器上安装和配置 Web 应用程序的用户能够运行测试以帮助确认他们的配置是否正确。 “设备”是用户可以更改的默认配置文件中的字符串。它是数组中的一个元素,他们可以在配置应用实例时添加到数组中或从数组中删除。
这是对工具的合理使用,还是我在滥用 Cucumber 和/或 Capybara?如果它是明智的,我会怎么做?如果这是一个坏主意,我可以使用哪些工具来代替?
这是我如何让它工作的。我只是不确定这是最好的方法。
为此,该功能必须看起来更像这样:
And the page has at least 3 photos, let us call the last one "third_photo"
在对应的步骤定义中,我使用一个XPath为第一张照片拉出对应的标签字符串,并将其分配给一个存储在类变量中的Hash对象。
And /^I the page has at least (\d*) photos, let us call the last one "([^\"]*)"$/ do |n, name|
if ! defined?(@note)
@note = Hash.new;
end
@note[name] = find(:xpath, '//ol[@id="menu"]/li[' +n+ ']/a').text;
end
后续步骤定义现在可以访问该值,无论它是什么。
所以,另一个功能可能是:
Then I uncheck "third_item"
相应的步骤定义可能是:
Then /I uncheck "([^\"]*)"/ do |item|
uncheck(@note[item])
end
但我感觉不太好。如果不出意外,我想可能与在步骤定义之外定义的另一个实例变量发生名称冲突。
感觉要么我做错了,要么我使用了错误的工具。这样做的正确方法是什么?
【问题讨论】:
标签: ruby rspec cucumber integration-testing capybara