Help us understand the problem. What is going on with this article?

【Rspec】個人まとめ

コマンド

モデルのテスト作成

bin/rails rspec:model モデル名

指定したファイルのみ

bundle exec rspec spec/models/sample_spec.rb

よく見るメソッド

  • モデルオブジェクトを生成する
build

build

  • モデルオブジェクトを保存する
save
  • モデルオブジェクトを生成、保存する
new
  • it毎に実行する
before(:each) do
  @user = build(:team_member)
end
  • スペックの最初のみ実行する
before(:all) do
  @user = build(:team_member)
end
  • 状態が変わったことを検証する
change

RSpec - change の基本動作。 ( by / from / to の使い方 )

アンチパターン

【初心者向け】レビュワーをイライラさせるRSpec集と解決方法

参考になるサイト

Rspecのbeforeとlet!の実行順序
RSpec の letとlet!とbeforeの挙動と実行される順番
letとlet!の違いがわからない
RSpecのletを使うのはどんなときか?(翻訳)
RubyWorld Conference2018にRubyスポンサーとして参加しました
Railsチュートリアル卒業者に捧げる、RSpec超入門

ActiveRecord

find、find_by、whereの違い

FactoryBot

名前空間の省略など
RailsアプリへのRspecとFactory_botの導入手順

任意のメソッドを実行する際は、どうするか

[ruby-on-rails] RSpec:letとbeforeブロックの違いは何ですか?

letは変数定義(シンボル)にしか使えなさそうなので、メソッドを遅延実行したい時は、beforeブロックを使っている。

トランザクションのテスト

http://pawelgoscicki.com/archives/2015/09/testing-database-transactions-explicitly-in-rspec/

使えそうなメソッド

ランダムな数字を配列いれる
https://teratail.com/questions/26576

nums = [*(1..40)] 

バリデーションのRspecに関して

  • バリデーションのエラーメッセージの確認

【Rapec】バリデーションエラーメッセージをチェックする

なんかコツ

require 'rails_helper'
# ディレクトリが違う場合は、
# uninitialized constant Lunch
# とエラーが吐かれるのでしっかり対応する 
# models/base/sample.rb 
# => Base::Sample
RSpec.describe Reservation::Lunch, type: :model do
  let(:family) { create(:family) }
  # 外部キーはassociationつけるか、任意でfactoryの中で指定する
  let(:child) { create(:child, family_id: family_id) }
  it "aaaaaaaaaaa" do
    expect(true).to be_truthy
  end
end

let,let!.before do

RSpec の letとlet!とbeforeの挙動と実行される順番
rspecのbefore(:all)の注意点

let : メソッドが実行されるタイミングで、呼び出される(遅延評価と言う)
let! : サンプルが実行されるタイミングで、呼び出される(itとかspecifyとか)
before, befere(:each) : let! と同じ
befere(:all) : 最初しか実行されない

メソッドのテスト

外部キーのoptionalに注意する

盲目的に、optional: falseだろうと思うのは危険。確認する必要がある。(しっかりバリデーションのテストを書いた方が良い)
Rails5からbelongs_to関連はデフォルトでrequired: trueになる

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away