我使用 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 应用程序的用户能够运行测试以帮助确认他们的配置是否正确。 “Device”是默认配置文件中用户可以更改的字符串。它是数组中的一个元素,他们可以在配置应用程序实例时添加到数组或从数组中删除。
这是对工具的明智使用,还是我在滥用 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 - 推广 cucumber / capybara 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9403269/