railsのテスト環境でやったときのいろいろなエラーの詰め合わせの記事です。
タイトルが抽象的ですみません。
rails s -e test
2019-10-06 18:13:28 WARN Selenium [DEPRECATION] Selenium::WebDriver::Chrome#driver_path= is deprecated. Use Selenium::WebDriver::Chrome::Service#driver_path= instead.
=> Booting Puma
=> Rails 5.2.3 application starting in test
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.1 (ruby 2.6.3-p62), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: test
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop
http://0.0.0.0:3000/
へアクセス。
Puma caught this error: No route matches [GET] "/" (ActionController::RoutingError)
# 以下、略
こんな、エラがー起こる。
root 'rails/welcome#index'
を追加する。
「Yay! You’re on Rails!」のおなじみの画面が出て安心する。
ちなみにこのページのファイルはこのパスにあるようだ。
/Users/hoge/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/railties-5.2.3/lib/rails/templates/rails/welcome/index.html.erb
curlで叩いてみる
curl localhost:3000/blogs/index/
Puma caught this error: PG::UndefinedTable: ERROR: relation "blogs" does not exist
LINE 1: SELECT "blogs".* FROM "blogs"
^
: SELECT "blogs".* FROM "blogs" (ActiveRecord::StatementInvalid)
# 以下、略。
なんだかすごい。エラーが出ている。
落ち着いてみる。
冒頭に
Puma caught this error: PG::UndefinedTable: ERROR: relation "blogs" does not exist
とある。
データベースがなんかおかしい?
単にrails s
だと正常に返ってくる。
DBがないのか?
test用のDBを作成する。
rails db:create RAILS_ENV=test
2019-10-06 17:55:03 WARN Selenium [DEPRECATION] Selenium::WebDriver::Chrome#driver_path= is deprecated. Use Selenium::WebDriver::Chrome::Service#driver_path= instead.
Database 'todo_slim_test' already exists
DBはあるようだ。
test用にmigrateしなくてはいけないのか?
$ rails db:migrate RAILS_ENV=test
2019-10-06 17:55:36 WARN Selenium [DEPRECATION] Selenium::WebDriver::Chrome#driver_path= is deprecated. Use Selenium::WebDriver::Chrome::Service#driver_path= instead.
== 20190818133341 CreateBlogs: migrating ======================================
-- create_table(:blogs)
-> 0.0645s
== 20190818133341 CreateBlogs: migrated (0.0646s) =============================
ついでにseedsもやっておく。
$ rails db:seed RAILS_ENV=test
2019-10-06 17:55:50 WARN Selenium [DEPRECATION] Selenium::WebDriver::Chrome#driver_path= is deprecated. Use Selenium::WebDriver::Chrome::Service#driver_path= instead.
再度やる。
$ rails s -e test
2019-10-06 17:55:58 WARN Selenium [DEPRECATION] Selenium::WebDriver::Chrome#driver_path= is deprecated. Use Selenium::WebDriver::Chrome::Service#driver_path= instead.
=> Booting Puma
=> Rails 5.2.3 application starting in test
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.1 (ruby 2.6.3-p62), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: test
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop
2019-10-06 17:56:05 +0900: Rack app error handling request { GET /blogs/index }
#<AbstractController::ActionNotFound: The action 'show' could not be found for BlogsController>
なんだか、まだなにかしなくてはいけないようだ。
developではこんなことを言われないので、DBがおかしいのかと疑ってみる。
テスト環境のDBの状態を見に行く。
rails db RAILS_ENV=test
DEPRECATION WARNING: Passing the environment's name as a regular argument is deprecated and will be removed in the next Rails version.
Please, use the -e option instead. (called from <top (required)> at /Users/hoge/product/ruby_sandbox/rails-blog-slim/bin/rails:9)
config.eager_load is set to nil. Please update your config/environments/*.rb files accordingly:
* development - set it to false
* test - set it to false (unless you use a tool that preloads your test environment)
* production - set it to true
-eオプションつけてやってと言われた。
dbを初期化する。
migrateもする。
rails db:migrate:reset
rails db:migrate
rails db -e test
つないで、DBができていることを確認した。
$ curl localhost:3000/blogs/index
[{"id":1,"title":"今日のできごと","article":"ごはんを食べて寝た","created_at":"2019-10-06T09:02:16.207Z","updated_at":"2019-10-06T09:02:16.207Z"}][
値が返ってきた。
いろいろ試した結果、たぶんDBが良くなかったんだろうという結論。
雑なポエム的なまとめ
test環境はdevelopと結構違ってつらい。
動きがおかしかったらDBをresetしてtest用に作り直す。
参考サイト
Ruby - rails db:migrate RAILS_ENV=test ができない|teratail
Ruby - rails s -e testでlocalhost:3000を見るとエラーが出てしまいます。エラーを消したいです。|teratail