RubyOnRailsの標準テストをやってみる

2012-10-16T00:00:00+00:00 Ruby Rails

標準テストなのかどうかは定かじゃないのですが、RSpecじゃなくてActiveSupport::TestCase/ActionController::TestCaseとかを使って単体テストとかやってみた。あくまで「どう使うのか」っていうのがポイントなんでコード上は特に意味の無い内容になってますんで

ちなみにベースは某イベントで開催されたRailsなLTの物をベースとされたのを参加者が自身で起こした物な模様

app/controllers/sample_controller.rb

class SampleController < ApplicationController

  def index
    render :text => "hoge"
  end

  def show
    @target_id = params[:id]

    respond_to do |format|
      format.html {
        render :text => @target_id
      }

      format.json {
        render json: { id: @target_id }
      }
    end
  end
end

app/models/sample_model.rb

class SampleModel < ActiveRecord::Base
  attr_accessible :name
end

app/helpers/sample_helper.rb

module SampleHelper
  def hoge
    return SampleModel.find_by_name("hoge")
  end
end

んじゃ、ここまで書いたのをテストする

test/fixtures/sample_models.yml

テスト時に投入されるデータをYAMLで定義すれば良い模様

one:
  name: hoge

two:
  name: fuga

three:
  name: foobar

test/unit/sample_model_test.rb

require "test_helper"

class SampleModelTestCase < ActiveSupport::TestCase

  setup do
    puts "SampleModelTestCase.setup"
  end

  test "hoge entry exists test" do
    assert_not_nil SampleModel.find_by_name("hoge")
  end
end

まぁ特にモデルにメソッドを実装したりしてないので(ry

test/unit/helper/sample_helper_test.rb

require "test_helper"

class SampleHelperTestCase < ActiveSupport::TestCase

  include SampleHelper

  test "hoge helper test" do
    entry = hoge()

    assert_not_nil entry
    assert_equal entry.name, "hoge"
  end
end

ヘルパーテストのやり方あってるかは微妙なんすけど、とりあえずincludeしちゃって(ry

test/functional/sample_controller_test.rb

require "test_helper"
require "json"

class SampleControllerTest < ActionController::TestCase

  #tests SampleController

  test "get index" do
    get :index

    assert_response :success
    assert_equal @response.body, "hoge"
  end

  test "get show" do
    get :show, id: 1

    assert_response :success
    assert_not_nil assigns(:target_id)
    assert_equal @response.body, "1"
  end

  test "get show(format json) test" do
    get :show, id: 1, format: "json"

    assert_response :success
    assert_equal @response.content_type, "application/json"

    data = JSON.parse(@response.body)
    assert_not_nil(data)
    assert_equal data["id"], "1"
  end

  test "get show(accept json) test" do
    @request.accept = "application/json"

    get :show, id: 1

    assert_response :success
    assert_equal @response.content_type, "application/json"

    data = JSON.parse(@response.body)
    assert_not_nil data
    assert_equal data["id"], "1"
  end
end

でコントローラーのテスト。respond_to等で処理される形式によりレスポンスを変えたりする場合には、:formatを指定するかrequest.acceptを変えてリクエストする事でそれに適したレスポンスが返ってくる模様

Native Client(NaCl)をやってみる (6) - pp::URLLoader - PagerTitle(Tab)Stripを使ってみる