[RSpec] binding.pry 단위 테스트 코드의 기본 용법

7011 단어 초학자용

소개



메모용으로 기록하고 있습니다.
특히 무엇인가를 참고한 것은 아니기 때문에, 실수는 지적해 주시면 다행입니다.

테스트 코드 실행 명령
bundle exec rspec 테스트 할 파일 이름 ← # spec/에서 설명

spec/factories/orders.rb
FactoryBot.define do
  factory :order do
    price { 3000 }
  end
end

spec/models/order_spec.rb
require 'rails_helper'

RSpec.describe Order, type: :model do
  before do
    @order = FactoryBot.build(:order)
  end

  describe '購入情報のデータの保存' do
    context '成功' do
      it "priceがあれば保存ができること" do
        expect(@order).to be_valid
      end
    end

    context '失敗' do
      it "priceが空では保存ができないこと" do
        @order.price = nil
        @order.valid?
        expect(@order.errors.full_messages).to include("Price can't be blank")
      end
    end
  end
end

기본 용법



FactoryBot의 인스턴스가 올바르게 생성되었습니까?
인스턴스 변수에 할당되어 있습니까?
를 확인합니다.

spec/models/order_spec.rb
RSpec.describe Order, type: :model do
  before do
    @order = FactoryBot.build(:order)
    binding.pry  
  end

Image from Gyazo

price: 3000
라는 값이 @order 에 포함되어 있는 것을 알았습니다.
FactoryBot의 인스턴스 생성은 성공입니다.

인스턴스 변수에 값이 포함되어 있습니까?
유효성 검사를 통해 오류가 있는지 여부?
를 확인합니다.

spec/models/order_spec.rb
describe '購入情報のデータの保存' do
    context '成功' do
      it "priceがあれば保存ができること" do
        expect(@order).to be_valid
        binding.pry  
      end
    end

Image from Gyazo
@order.valid?의 결과가 true입니다.
"price가 있으면 저장할 수 있는 것"이라는 테스트는 성공입니다.

인스턴스 변수에 값이 포함되어 있습니까?
유효성 검사를 통해 오류가 있는지 여부?
오류 메시지의 내용은?
를 확인합니다.

spec/models/order_spec.rb
context '失敗' do
      it "priceが空では保存ができないこと" do
        @order.price = nil
        @order.valid?
        expect(@order.errors.full_messages).to include("Price can't be blank")
        binding.pry  
      end
    end

Image from Gyazo
인스턴스 변수의 내용이, 대입한 price: nil 가 되어 있습니다.
이렇게하면 @order.valid?의 결과가 false가되고,
오류 메시지가 "Price can't be blank"임을 알 수 있습니다.

"price가 하늘에서는 저장할 수 없는 것"이라는 테스트는 성공입니다.

좋은 웹페이지 즐겨찾기