- 追加された行はこの色です。
- 削除された行はこの色です。
*目次 [#e4367973]
#contents
*基本 [#o7eabed4]
**ファイル構成 [#eed6b1ad]
-<RAILS_ROOT>/testの下に書く。
-単体テストは<RAILS_ROOT>/test/unitの下。
-scaffoldなどでひな形を作った場合、モデルに対するテストクラスは次のようになる。
#pre{{
require 'test_helper'
class PersonTest < ActiveSupport::TestCase
# Replace this with your real tests.
test "the truth" do
assert true
end
end
}}
** テスト用データベース [#af500535]
テスト用のデータベースを準備しないと動かせない(?)ので素直にテスト用のデータベースを準備する。
*** テスト用データベースを作成する [#p73ee352]
rake db:test:prepare
**テスト実行 [#eaa7c89a]
***直接実行する [#ua8ab1c1]
Railsのアプリケーションフォルダで実行する。
ruby -I test test/unit/person_test.rb
***rakeコマンドを使う [#v89f6822]
,rake test,全テストを実行する。
,rake test:units,ユニットテストを全て実行する。
*トラブルシューティング [#v74818de]
** テストを実行しようとすると"underlying cause no such file to load xxx" [#af003763]
-test/fixturesに古いモデル名のymlファイルが残ってないか確認する。
-active_record/fixtures.rbのfixturesメソッドを見ると次のようになってる。
#pre{{
def fixtures(*table_names)
if table_names.first == :all
table_names = Dir["#{fixture_path}/*.yml"] + Dir["#{fixture_path}/*.csv"]
p table_names
table_names.map! { |f| File.basename(f).split('.')[0..-2].join('.') }
else
table_names = table_names.flatten.map { |n| n.to_s }
end
}}
-ymlファイルとcsvファイルのファイル名部分からテーブル名を決めfixtureとして読み込もうとしていようだが、既に存在しない古いモデル名のymlファイルが残っているとテーブル上はなくなっているので矛盾が発生しエラーとなる。