0
0

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.

Rspecよくあるエラー問題集

Last updated at Posted at 2020-12-05

##事前準備

ターミナル上で下記コマンドを実行してcloneする。

git clone https://github.com/Shu-Hos/chat-app_error.git
cd chat-app_error
bundle install
yarn install
rails db:create
rails db:migrate

###問題1
ターミナルで下記コマンドを実行してください。

bundle exec rspec spec/models/user_spec.rb

するとNameError: uninitialized constant Faker
のエラーが発生したかと思います。
まずはこちらがErrorではなくfailuresになる段階まで改善してください。
※こちらはヒントなしで解決しましょう。

###問題2
上記のエラーが改善されて再度こちらのコマンドを実行してください

bundle exec rspec spec/models/user_spec.rb

しかしテストの結果は、重複したemailが存在する場合登録できないこと (FAILED - 1)が残ってしまっているかと思います。
こちらを修正してuserのモデル単体テストを成功させてください。

ヒント
こちらのテストの流れはユーザー1登録 => `ユーザー2登録時にユーザー1のemailで登録しようとする`ことです。

ユーザー1の中身をbinding.pryを使用して確認してみましょう。

###問題3
問題2まで解き終えたら次はメッセージの単体テストです。
以下のコマンドを実行してください。

bundle exec rspec spec/models/message_spec.rb

するとRuntimeErrorが発生したかと思います。
こちらの状態からmessage_spec.rbでもテストがパスするように修正してください。

※エラーの原因は2つあるので、両方修正ができて始めてmessageの単体テストもパスします。

ヒント
①エラー文を読むとどうやら画像の部分が怪しそうです。 binding.pryで処理を止めて@message.image.blobで画像データの中身を確認してみましょう。

②@message.userや@message.roomの中身も必要であれば確認してみましょう。

###問題4
ここからは結合テストのエラー問題です。
以下のコマンドを実行してください。

bundle exec rspec spec/system/message_spec.rb

すると、ログインができずにテストが通らないかと思います。
まずは結合テスト内でログインがされている段階を目標にコードの修正をしてください。

ヒント
tmpディレクトリ配下のscreenshotsディレクトリの中には結合テストを実行した時の画面がスクリーンショットとして自動保存されます。 そちらの動きから原因を特定しましょう。

###問題5
ここまで来ましたが、ログインしても投稿が出来ずにテストがまだ
通らないかと思います。
最後にこちらの問題を解決してmessage_spec.rbの結合テストを成功させてください

bundle exec rspec spec/system/message_spec.rb
ヒント
rails s でサーバーを起動させてから検証ツールで要素の中身を確認してみましょう。

お疲れさまです!!
何かご不明点とかあれば、今後ぜひ教えてください!

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?