📘
【RSpec】modelのテストで実際にレコードが生成されない
テストコード
spec/models/user_spec.rb
require 'rails_helper'
RSpec.describe User, type: :model do
it 'user作成' do
user = User.new
user.name = "test_user1"
user.save
end
end
これを実行してbin/rails sしてもレコードが表示されない。
原因
database.ymlの設定
bin/rails sだとdevelopmentのdbを見るようになっている。
なので、
bin/rails s -e testとかにするとレコードが見られる。
database.yml
# SQLite. Versions 3.8.0 and up are supported.
# gem install sqlite3
#
# Ensure the SQLite 3 gem is defined in your Gemfile
# gem 'sqlite3'
#
default: &default
adapter: sqlite3
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
timeout: 5000
development:
<<: *default
database: db/development.sqlite3
# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
<<: *default
database: db/test.sqlite3
production:
<<: *default
database: db/production.sqlite3
rails_helperの設定
spec/rails_helper.rb
# 〜略〜
config.use_transactional_fixtures = true
# 〜略〜
でトランザクションのままで、テストで生成されるレコードがコミットされていない。
spec/rails_helper.rb
# 〜略〜
config.use_transactional_fixtures = false
# 〜略〜
とすると、
bin/rails s -e testでレコードが見られた。
参考記事
Discussion