Railsテスト test:models実行エラー解決方法
Railsのテストスクリプト実行時に test_helper のエラーが出た場合の解決方法です。
これは Rails チュートリアル を参考にテストしていた時におこったエラーです。
よく考えれば当たり前の話なのですが、忘れないようにメモしておきます。
ここでは Railsテスト test:models実行エラーの解決方法 を紹介します。
Railsエラー内容
エラー内容なこんな感じ。
>rake test:models
rake aborted!
ActiveRecord::PendingMigrationError:
Migrations are pending. To resolve this issue, run:
bin/rails db:migrate RAILS_ENV=test
C:/Aptana/3.6.1/workspace/sample_app/test/test_helper.rb:3:in `<top (required)>'
C:/Aptana/3.6.1/workspace/sample_app/test/models/user_test.rb:1:in `require'
C:/Aptana/3.6.1/workspace/sample_app/test/models/user_test.rb:1:in `<top (required)>'
Tasks: TOP => test:models
(See full trace by running task with --trace)
テストスクリプトはこんな感じ。
require 'test_helper'
class UserTest < ActiveSupport::TestCase
def setup
@user = User.new(name: "Example User", email: "user@example.com")
end
test "should be valid" do
assert @user.valid?
end
end
解決方法
これはテスト環境にデータベース、もしくはテーブルが準備されていないことが原因でおこるエラーです。もう解決方法がメッセージにそのまんま出ているのでアレですが、下記のコマンドを実行すれば解決できます。
bundle exec rake db:migrate RAILS_ENV=test
db:migrate を初めて実行した時には、development.sqlite3 と test.sqlite3 という名前のファイルが生成されますが、テーブルは別です。DB Browser for SQLite を使って test.sqlite3 を開いてみるとわかります。
テーブルがないですね。初めてテストスクリプトを実行する時には、上記のコマンドを実行しましょう。
実行後、改めて test.sqlite3 を開いてみると・・・
はい、テーブルができましたね。
改めてテストを実行すると・・・
>rake test:models
Started with run options --seed 18925
1/1: [===================================] 100% Time: 00:00:00, Time: 00:00:00
Finished in 0.05074s
1 tests, 1 assertions, 0 failures, 0 errors, 0 skips
エラーなく実行できました^^
まとめ
Railsのテストスクリプト実行時に test_helper のエラーが出た場合の解決方法を紹介しました。
皆さんも試してみてください。
おつかれさまでした。