Railsのテスト環境でのいろいろなエラーでつらい

railsのテスト環境でやったときのいろいろなエラーの詰め合わせの記事です。
タイトルが抽象的ですみません。


```bash
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)
# 以下、略
```

こんな、エラがー起こる。

```ruby:config/routes.rb
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の状態を見に行く。

```bash
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もする。

```bash
rails db:migrate:reset
rails db:migrate
rails db -e test
```

つないで、DBができていることを確認した。

```bash
$ 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](https://teratail.com/questions/147316)

[Ruby \- rails s \-e testでlocalhost:3000を見るとエラーが出てしまいます。エラーを消したいです。｜teratail](https://teratail.com/questions/215579)