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

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

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

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

RSpec

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

Q&A

0回答

707閲覧

migrationの時にデータ投入したのに RSpec 実行すると消えてしまう

naserehari

総合スコア35

Ruby on Rails 6

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

RSpec

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

0グッド

0クリップ

投稿2022/02/18 14:50

前提・実現したいこと

RSpec 実行時に予めデータが入っていて欲しい。

発生している問題

マイグレーション時にデータを投入しています。
RAILS_ENV=test bin/rails db:create db:migrate
するとデータは入っているのですが、RSpec を動かすと消えてしまいます。

RSpec の設定とかでどうにかなるのでしょうか?

該当のソースコード

ruby

1# マイグレーションファイル 2class CreateRegions < ActiveRecord::Migration[6.0] 3 def self.up 4 create_table :regions do |t| 5 t.string :name 6 end 7 8 %w[ 9 北海道 10 東北地方 11 関東地方 12 中部地方 13 関西地方 14 中国地方 15 四国地方 16 九州地方 17 ].each do |name| 18 Region.create(name: name) 19 end 20 end 21 22 def self.down 23 drop_table :regions 24 end 25end

ruby

1# spec/models/region_spec.rb 2require 'rails_helper' 3 4RSpec.describe Region, type: :model do 5 it { expect(Region.count).to eq 8 } 6end

試したこと

shell

1$ RAILS_ENV=test bin/rails db:drop db:create db:migrate 2 3$ bin/rails runner -e test 'p Region.count' 48 5 6$ bundle exec rspec spec/models/region_spec.rb 7F 8 9Failures: 10 11 1) Region is expected to eq 8 12 Failure/Error: it { expect(Region.count).to eq 8 } 13 14 expected: 8 15 got: 0 16 17 (compared using ==) 18 # ./spec/models/region_spec.rb:4:in `block (2 levels) in <top (required)>' 19 20Finished in 0.04443 seconds (files took 5.4 seconds to load) 211 example, 1 failure 22 23Failed examples: 24 25rspec ./spec/models/region_spec.rb:4 # Region is expected to eq 8

補足情報(FW/ツールのバージョンなど)

以下の方法はなるべくやりたくないです。
(マイグレーション時にデータ投入したい。データ投入ロジックは DRY にしたい)

  • seeds.rb などを使う
  • fixtures を使う

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

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

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

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

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

maisumakun

2022/02/18 23:20

「データ投入ロジックは DRY にしたい」というのであれば、「本番用でもテスト用でもマイグレーションには書かず、どちらもseedで投入する」という手法も考えられますが、それも選択できない(したくない)状況でしょうか?
naserehari

2022/02/19 00:15

はい。そのつもりでした。本番用であれ、テスト時であれ、完成されたモデル(とデータ)なので依存ファイルを極力減らしたいな。と。 でも無理そうなら seed でも全然構わないです。何か方法があるのかな?と思った次第です (^^;
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問