Railsテスト test:models実行エラー解決方法

Railsのテストスクリプト実行時に test_helper のエラーが出た場合の解決方法です。

Railsテスト test:models実行エラー解決方法

これは Rails チュートリアル を参考にテストしていた時におこったエラーです。

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 を開いてみるとわかります。

DB Browser for SQLite

Railsテスト テーブルがない

テーブルがないですね。初めてテストスクリプトを実行する時には、上記のコマンドを実行しましょう。

実行後、改めて test.sqlite3 を開いてみると・・・

Railsテスト テーブルができた

はい、テーブルができましたね。

改めてテストを実行すると・・・

>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 のエラーが出た場合の解決方法を紹介しました。

皆さんも試してみてください。

おつかれさまでした。

この記事がお役に立ちましたら シェア をお願いいたします。