홍호나 2023. 6. 30. 16:59

RSpec : 테스트 코드를 작성하기 위한 테스트 프레임워크.

 

before : 각각의 테스트가 실행되기 전에 공통적으로 숳애해야 하는 설정 또는 준비 작업을 정의하는데에 사용된다.

before 블록이 실패하는 경우, 일반적으로 다음과 같은 시나리오가 발생합니다:

  1. before 블록 내에서 예외가 발생하면, 해당 테스트 케이스는 실행되지 않고 예외가 발생한 것으로 표시됩니다.
  2. before 블록 내에서 특정 조건을 충족하지 않으면, 해당 테스트 케이스는 실행되지 않고 실패한 것으로 표시됩니다.
RSpec.describe MyObject do
  before do
    # 실패하는 설정 작업
    raise "Error in before block"
  end

  it "does something" do
    # 이 부분은 실행되지 않음
  end
end

 

be_falsey : RSpec 기대 표현식 중 하나로 어떤 값이 거짓이라고 기대할 때 사용한다. 해당 값이 false 또는 nil일 경우에 테스트를 통과시킨다.

RSpec.describe MyObject do
  it "returns false" do
    result = false
    expect(result).to be_falsey
  end

  it "returns nil" do
    result = nil
    expect(result).to be_falsey
  end
end

 

expect : 주로 코드의 출력, 반환 값, 예외 발생 등과 관련하여 기대값을 설정하고 이를 검증하는 역할을 수행한다. expect 메서드의 반환 객체는 Matchers(매처)라고 불리는 다양한 메서드를 지원하여 테스트의 기대값을 표현하고 비교할 수 있게 한다. Matchers는 RSpec의 주요 기능 중 하나이다.

RSpec.describe Calculator do
  it "adds two numbers" do
    calculator = Calculator.new
    result = calculator.add(2, 3)
    expect(result).to eq(5) # Matchers인 eq 메서드를 호출하여 검증. to는 해당 검증이 성공해야 한다는 것을 의미함.
  end
end

 

Factory Bot : 테스트 데이터를 생성하기 위한 라이브러리. Factory Bot을 사용하면 테스트 시나리오에서 필요한 객체를 간편하게 생성할 수 있습니다.

# spec/factories/user.rb
# 팩토리 파일

FactoryBot.define do
  factory :user do
    name { "John Doe" }
    email { "john.doe@example.com" }
    age { 30 }
  end
end

위의 예시에서 user 팩토리는 name, email, age와 같은 속성을 가진 User 객체를 생성합니다.

이제 테스트 코드에서 해당 팩토리를 사용하여 객체를 생성할 수 있습니다:

# spec/models/user_spec.rb

RSpec.describe User do
  it "has a valid factory" do
    user = FactoryBot.create(:user)
    expect(user).to be_valid
  end
end

위의 예시에서 FactoryBot.create(:user)를 사용하여 user 팩토리를 통해 User 객체를 생성합니다.

 

let : 테스트 코드에서 재사용 가능한 변수를 정의하기 위해 사용됩니다.

RSpec.describe Calculator do
  let(:calculator) { Calculator.new }

  it "adds two numbers" do
    result = calculator.add(2, 3)
    expect(result).to eq(5)
  end

  it "subtracts two numbers" do
    result = calculator.subtract(5, 2)
    expect(result).to eq(3)
  end
end

위의 예시에서 let(:calculator)은 Calculator 객체를 생성하는 데 사용되는 변수를 정의합니다. let은 지연 평가되므로, calculator 변수의 값을 처음으로 참조할 때까지 Calculator.new가 호출되지 않습니다. 이후에는 calculator 변수를 여러 곳에서 참조하여 객체를 사용할 수 있습니다.

let은 각 테스트 케이스마다 한 번만 계산됩니다. 따라서 calculator 변수는 각 테스트 케이스에서 독립적으로 동작하며, 테스트 코드 사이에서 상태를 공유하지 않습니다.