質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

4117閲覧

rspec内でcreateしたデータが確認できない理由が知りたい

k499778

総合スコア599

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2021/06/10 11:00

編集2021/06/10 11:55

前提・実現したいこと

元々Javaを開発していましたが、現在Railsを勉強しています。

現状、デバッグ中にRspec内でcreateしたデータがSQLクライアントツール(TablePlus)で確認できません。
その原因を究明したいです。
(rails consoleでは確認できる)

わかる方がいれば教えて頂けると助かります。

▽SQLクライアントツール(TablePlus)イメージ図
TablePlusイメージ図

試したこと

rails console(RubyMineの対話式コンソール。モデル名.all)では確認できるため、データが保存されていることは確認済みです。

TablePlusではlocalデータは保存されており、画面表示にも連携されています。なので、TablePlusで保存されたデータが見れることも確認済みです。

あと気にしていることは、以下です。
①RSpec(test)用の接続先がTablePlusの設定と合っているかどうか。
②RSpecのcreateメソッドはDBに保存される認識だが、実行中(デバッグ中)などに確認できるのか。(Rails consoleではできたが。。)

①に関しては、database.ymlのtestに記載されている設定の認識です。test用の接続先でも他の既存データがあることは確認できています。(他の接続先と間違っていないかが懸念点)

②に関しては、イメージとしては、デバッグ中にcreateされたデータがSQLクライアントツールでも見れると勝手に思っていますが、そもそも見れなかったりするのでしょうか。rails consoleでは確認できたので同じように見れるのでは?と思ってしまっています。(実行後はDatabaseCleanerで消されているのでデータがないのは納得できる)


追記
database.ymlのtestの定義に以下のように動的に変わるような記述がありました。

database: sample_test<%= ENV['TEST_ENV_NUMBER'] %>

「TEST_ENV_NUMBER」でプロジェクト内を検索すると、「.rspec_parallel」内で記述がありました

--format RspecJunitFormatter --out rspec/rspec<%= ENV['TEST_ENV_NUMBER'] %>.xml

調べるとCircleCI絡みの記事が出てきました。並列実行など。

database.ymlのtestはRSpecの接続先ではないのかな。。

ただ<%= ENV['TEST_ENV_NUMBER'] %>も単体だと空文字が入りそうだから問題なさそう?うーん

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

rspecはtest用のDBに接続します。
config/database.ymlに記述されている通りの設定で接続します。

で、そもそもRailsにおけるテストはユニットテストであり、自動テストを前提としています。
繰り返しテストを行う=DBに変更を行っても結果が同一である事を保証する必要があります。
したがって、テストの単位(contextやexample)ごとにロールバックが自動的に行われるのは自明であると思います。

なので、目視でテストDBの内容を確認しようとする考え方自体が間違っています。
exampleなどの後にロールバックされるので、データは消えるため。

なので目視で確認しようと考えないでください。
コードのあるべき振る舞いをコードで確認するのがrspecでありテストの考え方です。

投稿2021/06/12 13:29

編集2021/06/12 13:30
mingos

総合スコア4025

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k49977

2021/06/12 13:35 編集

x
k499778

2021/06/12 13:36

かしこまりました。目視で確認することは諦めます。 できれば確認できたらより広く理解できるので嬉しいと思ったのですが。 rails consoleでは一応確認できるので、どうしても確認したい時はそのやり方にします。 rspecの考え方を知れて良かったです。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問