rspec-railsでモデルをテストしてみる
Railsでモデル作成
Railsでモデルを作成します。
$ rails g model User name:string
これで、モデルを作成できました。
次のようなログがでました。
Running via Spring preloader in process 83 invoke active_record create db/migrate/20210804132134_create_users.rb create app/models/user.rb invoke rspec create spec/models/user_spec.rb
このログにも書いてある通り、マイグレーションファイル、モデル定義のapp/models/user.rb
のほかに、テスト用のファイルも自動生成されました。
spec/models/user_spec.rb
です。
ここにUserモデルのテストを書いていきます。
モデルを作成した後は、マイグレーションを実行しておく必要があります。
ここでは、テスト環境でのマイグレーションのみ実行しておきます。
$ rails db:migrate RAILS_ENV=test
テストを書く前に、Userモデルに簡単なバリデーションを設定しておきます。
class User < ApplicationRecord validates :name, presence: true, uniqueness: true end
バリデーションの内容は、「空は無効」と「重複不可」です。
モデルをテストしてみる
require 'rails_helper' RSpec.describe User, type: :model do it "有効な場合" do user = User.create(name: "Bob") expect(user).to be_valid end it "nameが空欄の場合、無効" do user = User.create(name: nil) expect(user).to be_invalid end it "nameが重複している場合、無効" do user1 = User.create(name: "Ken") user2 = User.create(name: "Ken") expect(user2).to be_invalid end end
テストの実行はrspec
コマンドで行います。
$ rspec ... Finished in 0.03052 seconds (files took 0.75964 seconds to load) 3 examples, 0 failures
終わり