Railsでテストフォルダが作成されなかった時の話


Railsでテストフォルダが作成されなかった時の話

はじめに

最近、ある事情によりRuby on Railsの勉強を始めました。そこで発生したissueについて話そうかと思います。Railsを使用している人、勉強中の方は知っていると思うのですが、Railsには標準でテスト機能がついています。controllerやmodelを作成した時に自動で作成されるやつです。私がRailsの勉強としてRailsチュートリアルをしていた時に、それが作成されなかった事件がありました。チュートリアル序盤のrails generate controller コントローラー名 アクション名でcontrollerを作成した際のことです。rails tでテストは走るのにどうしてだろうと思い調べました。その時に見つけた解決方についてメモします。

解決方

プロジェクト内のconfig/application.rbに

require "rails/test_unit/railtie"

を追加したら無事testフォルダが作成されました。
試しに一度

rails destroy controller コントローラー名 アクション名

で削除してから再度

rails g controller コントローラー名 アクション名

で作成すると

/myapp # rails g controller Index home help
Running via Spring preloader in process 556
      create  app/controllers/index_controller.rb
       route  get 'index/home'
get 'index/help'
      invoke  erb
      create    app/views/index
      create    app/views/index/home.html.erb
      create    app/views/index/help.html.erb
      invoke  test_unit
      create    test/controllers/index_controller_test.rb <-これ
      invoke  helper
      create    app/helpers/index_helper.rb
      invoke    test_unit
      invoke  assets
      invoke    scss
      create      app/assets/stylesheets/index.scss

作成されましたね!

ちなみに

require 'rails/all'

となっている人は大丈夫なはずです。

感想

チュートリアルとは違うversionのRailsを使い、尚且つDockerで環境を構築したので期待した状態にはならなかったようです。この問題を解決する方法をいろいろググってたけど、同じ経験をしている人は多くない?みたいです。しかし、Railsの勉強にはなりました!application.rbで他にも多くの設定ができるようです。例えばgenerateした時にstylesheetやhelperの作成を許可するかどうかなど...
詳しくは「rails newしたらconfig.generatorsをまず設定しよう」(https://qiita.com/yuutetu/items/135b1c8ab512208aebfe) を読んでみると良いかもしれません。

環境

ruby 2.6.5
Rails 6.1.0