1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【rails tutorial 3.4.4】ローカル環境でテストコードを通す方法

Last updated at Posted at 2020-02-13

railsチュートリアルをローカル環境で開発時に、
ルーティング、コントローラ、ビュー、テストにコードを正しく記述しているにも関わらず、テストが通らずエラーで解決に非常に時間がかかりました。
開発環境はvagrantで、テキストエディタはVScodeを使っています。

#エラー文
テスト実行時のエラーは以下になります。
DEPRECATION WARNING: You didn't set secret_key_base. Read the upgrade documentation to learn more about this new config option. (called from block in class:StaticPagesControllerTest at /vagrant/re_learn/test/controllers/static_pages_controller_test.rb:23)
ERROR["test_should_get_help", StaticPagesControllerTest, 0.29687339199881535]
test_should_get_help#StaticPagesControllerTest (0.30s)
RuntimeError: RuntimeError: Missing secret_key_base for 'test' environment, set this value in config/secrets.yml
test/controllers/static_pages_controller_test.rb:23:in `block in class:StaticPagesControllerTest'

#原因
・minitestのGemを入れてなかった
・railsのバージョン5.2未満だった

#説明
・テスト実行時はrspecやminitestなどをよく使いますが、勘違いしてrspecのGemを入れていたため、正常に動作しなかったです。
(当然ですねw)

・railsはバージョンが5.1から5.2にアップグレードする際に、大きな変更があったようで、secret_key_baseという秘密鍵の要求が必須だったものがなくなったようです。
つまり5.1系だと秘密鍵を要求されエラーになります。
railsチュートリアルで推奨されているバージョンが5.1.6なので~~(私含め初学者の方が)~~陥りやすい点かと思います。

※補足
herokuでデプロイ時にはrailsバージョンを5.1にした方がいい場合があるので、デプロイ時のみバージョンを下げるもしくは、発生するエラーに対処する必要があるかもしれません。

#対策
・minitestのGemを追加

/Gemfile

group :test do
  gem 'rails-controller-testing', '1.0.2'
  gem 'minitest',                 '5.10.3'
  gem 'minitest-reporters',       '1.1.14'
  gem 'guard',                    '2.13.0'
  gem 'guard-minitest',           '2.4.4'
end

bandle installを実行

$ bundle install

・railsのバージョンを5.2以上に変更

config.load_defaults を5.2にする。

/config/application.rb
require_relative 'boot'

require 'rails/all'

# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)

module アプリ名
  class Application < Rails::Application
    # Initialize configuration defaults for originally generated Rails version.
    config.load_defaults 5.2
    # config.active_record.sqlite3.represent_boolean_as_integer = true
    # Settings in config/environments/* take precedence over those specified here.
    # Application configuration can go into files in config/initializers
    # -- all .rb files in that directory are automatically loaded after loading
    # the framework and any gems in your application.
  end
end

アプリで使っているrailsのバージョンを確認

bundle exec rails -v
=> Rails 5.1.6

Gemfile内のrailsのバージョンを5.2以上にして,
bundle updateを実行

gem 'rails',        '~> 5.2.0'
$ bundle update rails

バージョンを確認すると

$ rails -v
=> Rails 5.2.4.1

これでテストを実行すると、正常に動作しました。

#まとめ
・機能面でのエラーがあったらその使いたい機能は何であるか認識することと、それがGemfileにあるか確認する。
・railsのバージョンは慎重に扱う。
・railsはシステムの脆弱性の改善を施してから、バージョンアップしていることが多いのでバージョンを下げる行為はなるべく避けた方が良い。
・Gemfileに書いたことはbundle installによってGemfile.lockに反映される。それを読み込んで処理等が実行される。

##参考
https://discuss.circleci.com/t/missing-secret-key-base-for-test-environment-set-this-value-in-config-secrets-yml/5179/2

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?