Railsテスト『十』見逃せない雑多
今日は雑多なテスト知識を紹介しますが、見逃すことはできません.
まず、よく使うテストコマンドについてご紹介します
rake test
ユニットテスト、機能テスト、統合テストを含むすべてのテストを実行します.
rake test:units
すべてのユニットテストを実行します.
rake test:functionals
すべての機能テストを実行
rake test:integration
すべての統合テストを実行します.
rake test:recent
最近変更したテストを実行します.
rake test:uncommited
コミットされていないすべてのテストを実行します.svnとgitをサポートします.
setupとteardown
複数のテストメソッドを含むテストクラスには、各テストの実行前と後に行う必要がある作業、実行する必要があるコードが含まれる場合があります.
たとえば、オブジェクトの作成、オブジェクトのクリーンアップなどです.集中するとメンテナンスが容易になり、修正が容易になり、読みやすくなります.
このようなことはsetupとteardownに任せることができます.setupは、のコードが各テストメソッドが実行される前に実行され、teardownのコードは各テストメソッドが実行された後に実行されます.
ここでは、Admin::TagsControllerの機能テストの例を挙げて、setupとteardownを導入します.タグを追加するにはログインが必要で、ユーザー情報が使用され、sessionに値が必要です.この部分はAdmin::TagsControllerのすべてのactionで必要で、同じものを使用すればいいので、setupとteardownに置くのが適切です.
またrailsはsetupとteardownをcallbackとして実装し、setupとteardownを次の方法で指定することができます. a block a method a method name as a symbol a lambda
テストroutes
まず、よく使うテストコマンドについてご紹介します
rake test
ユニットテスト、機能テスト、統合テストを含むすべてのテストを実行します.
rake test:units
すべてのユニットテストを実行します.
rake test:functionals
すべての機能テストを実行
rake test:integration
すべての統合テストを実行します.
rake test:recent
最近変更したテストを実行します.
rake test:uncommited
コミットされていないすべてのテストを実行します.svnとgitをサポートします.
setupとteardown
複数のテストメソッドを含むテストクラスには、各テストの実行前と後に行う必要がある作業、実行する必要があるコードが含まれる場合があります.
たとえば、オブジェクトの作成、オブジェクトのクリーンアップなどです.集中するとメンテナンスが容易になり、修正が容易になり、読みやすくなります.
このようなことはsetupとteardownに任せることができます.setupは、のコードが各テストメソッドが実行される前に実行され、teardownのコードは各テストメソッドが実行された後に実行されます.
ここでは、Admin::TagsControllerの機能テストの例を挙げて、setupとteardownを導入します.タグを追加するにはログインが必要で、ユーザー情報が使用され、sessionに値が必要です.この部分はAdmin::TagsControllerのすべてのactionで必要で、同じものを使用すればいいので、setupとteardownに置くのが適切です.
- require 'test_helper'
-
- class Admin::TagsControllerTest
- include FactoryGirl::Syntax::Methods
-
- def setup
- @user_valid = create(:user_valid)
- @request.session[:user_id] = @user_valid.id
- end
-
- def teardown
- @user_valid = nil
-
- end
-
- def test_should_create_tag_successfully
-
-
- tag = build(:tag_valid)
-
- assert_difference "Tag.count" do
- post :create, {:tag => { :title => tag.title}}
- end
- end
-
- def test_should_create_tag_fail
-
-
- assert_no_difference "Tag.count" do
- post :create, {:tag => { :title => ""}}
- end
- end
- end
またrailsはsetupとteardownをcallbackとして実装し、setupとteardownを次の方法で指定することができます.
- setup :init
-
- teardown do
- @user_valid = nil
-
- end
- private
- def init
- @user_valid = create(:user_valid)
- @request.session[:user_id] = @user_valid.id
- end
テストroutes
- assert_routing(
- "signout",
- {:controller =>"sessions", :action =>"destroy", :method => :delete}
- )
- def test_route_posts_id
-
- category = FactoryGirl.create(:category_valid)
-
- article = FactoryGirl.create(:post_valid)
-
- assert_routing("posts/#{article.id}", {:controller => "posts", :action => "show", :id => article.id.to_s })
-
-
- end