Railsテスト「六」実戦ユニットテスト-fixturesをfactory-girlに置き換えてシミュレーションデータ2を作成
11862 ワード
前回はfactory-girlについて紹介しましたが、railsのfixturesの代わりにシミュレーションデータを生成するための良いツールです.
それは直感的で、読みやすくて、読みやすくてメンテナンスしやすいです.最も重要なのは、モデル向け、ビジネス向け、アプリケーション向けであり、fixturesシミュレーションのデータはデータベース向けである.しかし、私たちのユニットテスト、機能テスト、さらに将来紹介する統合テストは、ビジネス向けであり、ビジネスの観点からのテストであり、システムがビジネスニーズを満たしているかどうかをテストします.だからメリットは明らかで、みんなが使ってから少し感じられると信じています.
前回では、単一モデルのシミュレーションオブジェクトを作成し、プロパティの値を塗りつぶすための基本的な使用について説明しました.
パスワードが一致しないため、2つのuserオブジェクトをシミュレートしました.1つは有効で、1つは無効です.
に合格
factory-girlシミュレーションのデータにアクセスし、ユニットテストおよび機能テストでこれらのシミュレーションのデータを使用することができます.
しかし、時にはより高い要求があります.例えば、私たちのエンティティは関係があります.has_many,belongs_to,has_and_belongs_to_manyなど.モデルを作成しながら、関連エンティティも作成できますか?答えは:いいです.
簡単な関係を挙げましょう.私のblogプロジェクトを持ってきてください.
postとcategoryは、1つのpostが1つのcategoryに属し、1つのcategoryが複数のpostを含む.
私たちは次のようにすることができます.
2つのcategory,2つのpostを2つの方法でシミュレートし,postに対応するcategoryを指定したことを示した.
上記のように使用すると、postシミュレーションオブジェクトのcategoryシミュレーションオブジェクトにアクセスできます.
もう一つの方法はalias別名を利用することです.
私たちのuserとpostとcommenterが次の関係であると仮定します.
次のようにシミュレーションデータを作成できます.
aliasエイリアスを使用して、userオブジェクトに2つのエイリアスを付け、1つはpost用、1つはcomment用にします.別名はpostとcommentの2つの属性にそれぞれ対応します.
参考文献
1.factory-girl getting started
それは直感的で、読みやすくて、読みやすくてメンテナンスしやすいです.最も重要なのは、モデル向け、ビジネス向け、アプリケーション向けであり、fixturesシミュレーションのデータはデータベース向けである.しかし、私たちのユニットテスト、機能テスト、さらに将来紹介する統合テストは、ビジネス向けであり、ビジネスの観点からのテストであり、システムがビジネスニーズを満たしているかどうかをテストします.だからメリットは明らかで、みんなが使ってから少し感じられると信じています.
前回では、単一モデルのシミュレーションオブジェクトを作成し、プロパティの値を塗りつぶすための基本的な使用について説明しました.
- FactoryGirl.define do
- factory :user_valid, :class => :User do
- nickname "nickname"
- email "[email protected]"
- password "123"
- password_confirmation "123"
- end
- factory :user_invalid_password_do_not_match, :class => :User do
- nickname "nickname2"
- email "[email protected]"
- password "1232"
- password_confirmation "123"
- end
- end
パスワードが一致しないため、2つのuserオブジェクトをシミュレートしました.1つは有効で、1つは無効です.
に合格
- user = FactoryGirl.build(:user_valid)
factory-girlシミュレーションのデータにアクセスし、ユニットテストおよび機能テストでこれらのシミュレーションのデータを使用することができます.
しかし、時にはより高い要求があります.例えば、私たちのエンティティは関係があります.has_many,belongs_to,has_and_belongs_to_manyなど.モデルを作成しながら、関連エンティティも作成できますか?答えは:いいです.
簡単な関係を挙げましょう.私のblogプロジェクトを持ってきてください.
postとcategoryは、1つのpostが1つのcategoryに属し、1つのcategoryが複数のpostを含む.
- class Post < ActiveRecord::Base
- belongs_to :category
- end
- class Category < ActiveRecord::Base
- has_many :posts
- end
私たちは次のようにすることができます.
- FactoryGirl.define do
- factory :category do
- title "category"
- end
-
- factory :category_valid, :class=>:Category do
- title "categorytitle"
- end
- end
-
- FactoryGirl.define do
- factory :post_valid_with_category1, :class => :Post do
- title "post"
- slug "slug"
- summary "summary"
- content "content"
- category
- end
-
- factory :post_valid_with_category2, :class => :Post do
- title "post"
- slug "slug"
- summary "summary"
- content "content"
- association :category, :factory => :category_valid
- end
-
- end
2つのcategory,2つのpostを2つの方法でシミュレートし,postに対応するcategoryを指定したことを示した.
- build(:post_valid_with_category1).category.title="category"
-
- build(:post_valid_with_category1).category.title="categorytitle"
上記のように使用すると、postシミュレーションオブジェクトのcategoryシミュレーションオブジェクトにアクセスできます.
もう一つの方法はalias別名を利用することです.
私たちのuserとpostとcommenterが次の関係であると仮定します.
- class User < ActiveRecord::Base
- attr_accessible :first_name, :last_name
- has_many :posts
- end
-
- class Post < ActiveRecord::Base
- attr_accessible :title
- belongs_to :author, :class_name => "User", :foreign_key => "author_id"
- end
-
- class Comment < ActiveRecord::Base
- attr_accessible :content
- belongs_to :commenter, :class_name => "User", :foreign_key => "commenter_id"
- end
次のようにシミュレーションデータを作成できます.
- factory :user, aliases: [:author, :commenter] do
- first_name "John"
- last_name "Doe"
- end
-
- factory :post do
- author
- # instead of
- # association :author, factory: :user
- title "How to read a book effectively"
- end
-
- factory :comment do
- commenter
- # instead of
- # association :commenter, factory: :user
- content "Great article!"
- end
aliasエイリアスを使用して、userオブジェクトに2つのエイリアスを付け、1つはpost用、1つはcomment用にします.別名はpostとcommentの2つの属性にそれぞれ対応します.
参考文献
1.factory-girl getting started