ねもぷらす

ふぁいんでぃんぐねもの日記。プログラミングとか育児とか

Ruby on Rails 3 アプリケーションプログラミング(8/9)

目次

テスト

rails が対応しているテスト

名称 概要
Unitテスト モデル単体の検索・更新・検証動作をチェック
Functionalテスト ステータスコードやテンプレート変数、ビューによる出力結果などコントローラ/テンプレートの呼び出しをチェック
Integrationテスト 複数コントローラに跨るユーザの実際の操作に沿った挙動のチェック
Performanceテスト アプリケーションの実行時間を計測

テストの準備

  1. テストデータベース構築
    1. rake db:migrate
    2. rake db:test:load
    3. rails dbconsole test
      1. .tables
      2. →テーブルがインポートされていることを確認
    4. rake db:test:purge (テストDBを破棄)

Unitテスト

  • Unitテスト=単体テスト、モデルが正しく動作するかをチェックするテスト。
  • テストファイル:test/unit/モデル名_test.rb
    • Assertionメソッドをゴリゴリ書く。
  • testメソッド
  test "book validate" do
    book = Book.new({
      :isbn => '978-4-7741-44',
      :title => 'JavaScript本格入門',
      :price => 3100,
      :publish => '技術評論社',
      :published => '2011-01-14',
      :cd => false
    })
    assert !book.save, 'Failed to validate'
    assert_equal book.errors.size, 3, 'Failed to validate count'
    assert book.errors[:isbn].any?, 'Failed to isbn validate'
  end
  • テストの実行
$ rake test:units TEST="test/unit/book_test.rb"

Functionalテスト

  • Functionalテスト=機能テスト、コントローラ(アクション)に対する検証。
  • テストファイル:test/functional/コントローラ名_controller_test.rb
    • Assertionをゴリゴリ書くけどUnitテストと違いコントローラ起動のため get: やら post: やらをコールする。
  • テストの実行
$ rake test:functionals TEST="test/functional/hello_controller_test.rb"

Integrationテスト

  • Integrationテスト = 結合テスト、複数コントローラに跨るユーザの操作を検証
  • テストファイルの作成
$ rails g integration_test 結合テスト名
  • テストファイル:test/integration/結合テスト名_test.rb
    • 書き方はFunctionalテストと同様。
    • follow_redirect! によって直前のリダイレクトを追跡。
$ rake test:integration TEST="test/integration/admin_login_test.rb"