我会用两种方法改变它。首先,在较新版本的Cucumber中,Web步骤已被弃用。因此,诸如“当我用”blah“填充”blah“时,现在不鼓励。其次,测试数据库中用户的数量并没有描述完整的情况。您想知道用户是您创建的用户,意思是您最终添加的相同名称和其他任何属性。为了处理这些类型的步骤,我发现自己写场景,如:
Scenario: Creating a user
When I create the following users:
| name |
| Chandler Bing |
| Some Other Guy |
Then I should have the following users:
| name |
| Chandler Bing |
| Some Other Guy |
然后在你的步骤定义,你会做什么网页步骤,这样做的:
Given /^I create the following users:$/ do |table|
table.hashes.each do |row|
visit new_user_path
fill_in 'Name', with: row['name']
click_button 'Create User'
end
end
Then /^I should have the following users:$/ do |table|
# Ensure users with same name are taken into account
table.hashes.size.should == User.count
table.hashes.each do |row|
user = User.find_by_name(row['name'])
user.should_not be_nil
end
end
的几个注意事项这种方法:
- 它允许您的步骤是可重复使用的。如果您想测试否定路径并尝试添加无效用户,则不必编写新的步骤。
- 特征文件中较少的样板代码。如果你有一个利益相关者,他们应该更容易阅读这些步骤。
- 你实际上正在学习水豚,我知道我个人理所当然地以网页步骤。
- 您可以使用更少的代码添加一堆用户。
谢谢详细的答案是,Beerlington。出于某种原因,你的建议似乎对我无法解决。如果我有几个同名的人呢?在这种情况下,我怎么能知道用户是我创建的用户,而不是同名的用户?您的解决方案高度依赖于模型属性的唯一性。 – Shamaoke 2012-01-15 10:53:23
伟大的问题!良好的测试是关于对测试场景有信心。这只是一个例子,显示了编写黄瓜场景的另一种方式,可以给你一些额外的灵活性。没有什么能够阻止您向Then步骤添加额外的断言,该步骤检查表的大小是否等于数据库中的记录数。我会更新我的答案,举例说明这可能如何工作。 – 2012-01-18 13:53:44