RSpecのテストデータは何処へ

RSpecのテストデータは何処へ

RSpecのテストデータ処理はどのように動いているのか、確認してみました。

テストデータはDBに保管されているのか

設定によるようです。

spec/rails_helper.rbのデフォルト設定では、以下になっています。

# If you're not using ActiveRecord, or you'd prefer not to run each of your
# examples within a transaction, remove the following line or assign false
# instead of true.
config.use_transactional_fixtures = true

Trueの場合、トランザクションのみ実行され、コミットされないのでDBに保存されていないというわけのようです。

ログを見たい

以下の設定をspec/rails_helper.rbに入れることによって可能です。

Rails.logger = Logger.new(STDOUT) #testlogに保存
ActiveRecord::Base.logger = Logger.new(STDOUT) #トランザクションログが標準出力される

トランザクションログが実際に表示された内容です。

タスクを作成できること
D, [2020-10-23T10:14:04.643284 #3369] DEBUG -- :    (0.0ms)  begin transaction
D, [2020-10-23T10:14:04.643721 #3369] DEBUG -- :    (0.0ms)  SAVEPOINT active_record_1
D, [2020-10-23T10:14:04.646218 #3369] DEBUG -- :   User Exists (0.7ms)  SELECT  1 AS one FROM "users" WHERE "users"."email" = ? LIMIT ?  [["email", "user_2@example.com"], ["LIMIT", 1]]
D, [2020-10-23T10:14:04.646877 #3369] DEBUG -- :   User Create (0.3ms)  INSERT INTO "users" ("email", "crypted_password", "salt", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?)  [["email", "user_2@example.com"], ["crypted_password", "$2a$04$4wv33iiS21.kEVhW6sFkZO/T/yS150D7H6jQ7R/GuBgsG3NRqiq5y"], ["salt", "P6DdCwxgpJJ_1icKmpVC"], ["created_at", "2020-10-23 01:14:04.646305"], ["updated_at", "2020-10-23 01:14:04.646305"]]
D, [2020-10-23T10:14:04.647047 #3369] DEBUG -- :    (0.0ms)  RELEASE SAVEPOINT active_record_1
D, [2020-10-23T10:14:04.648436 #3369] DEBUG -- :   Task Exists (0.1ms)  SELECT  1 AS one FROM "tasks" WHERE "tasks"."title" = ? LIMIT ?  [["title", "test_title"], ["LIMIT", 1]]
D, [2020-10-23T10:14:04.648951 #3369] DEBUG -- :    (0.3ms)  rollback transaction

これで、sequenceが正常に動いているのかなどテスト状況を確認することができそうです。

また、example単位でトランザクションロールバックされていることが分かります。