私はこれを2つの方法で変更します。まず、新しいバージョンのCucumberではWebのステップが廃止されました。そのために、「私が「ああ」と「ああ」で記入すると、今はお勧めできません。第二に、データベース内のユーザー数をテストすることは、完全な画像を記述することではありません。あなたは、あなたが作成したものであることを知りたいと思います。つまり、同じ名前を付け加えて、他のプロパティを追加することになります。
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
をこのアプローチについての注意事項:
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 |
その後、あなたのステップの定義では、あなたがウェブのステップは何をしていただろう:ステップのこれらのタイプを処理するために、私のようなシナリオは自分が書い見つけます:
- これにより、ステップを再利用できるようになります。否定的なパスをテストし、無効なユーザーを追加する場合は、新しいステップを作成する必要はありません。
- フィーチャファイル内のボイラープレートコードが少なくなりました。ステークホルダーがいる場合は、手順を読みやすくする必要があります。
- あなたは実際に私が個人的にウェブのステップで当然のことをしたことを知っているカピバラを学ぶでしょう。
- コードの数がはるかに少ないユーザーを追加できます。
感謝詳細な答えは、Beerlington。何らかの理由であなたの提案は私には判りにくいようです。同じ名前の人が複数いる場合はどうなりますか?この場合、ユーザーは私が作成したものだが、同じ名前のユーザーではないことをどのように知ることができますか?あなたのソリューションは、モデル属性の一意性に大きく依存します。 – Shamaoke
大きな質問!良いテストとは、テストシナリオに自信を持っていることです。これは単にキュウリのシナリオを書く別の方法を示しています。テーブルのサイズがデータベースのレコード数と等しいことを確認するThenステップに追加のアサーションを追加することを止めるものは何もありません。私はこれがどのように機能するかの例を示すために私の答えを更新します。 –