Rspec으로 앱 테스트하기

Created by Clemens Helm, @clemenshelm and Floor Drees, @floordrees

번역 @corazzon

Rspec은 루비 테스팅 프레임워크입니다. 문장으로 어플리케이션 명세에 대한 행동(behavior)을 적으며, 루비답지 않습니다. 터미널에 테스트 결과가 표시되기 때문에 읽기 능력을 테스트할 수 있습니다(농담입니다).

COACH: 테스팅과 BDD(Behavior-Driven Development)에 대해 얘기해 보세요.

rspec 설치

처음 시작하는 분들을 위해 RSpec과 의존성있는 gem 들을 설치 합니다.

gem install rspec

그리고 나서 다음의 명령어로 초기화 해줍니다.

rspec --init

프로젝트 폴더의 spec폴더에 spec_helper.rb을 만들어 주세요. 그리고 .rspec도 만들어 주세요.

루비스트는 종종 ‘테스트’와 ‘명세’를 바꿔 말하기도 하는데 그 이유는 테스트를 ‘spec’폴더에 저장하기 때문에이에요. 다음과 같이 테스트 파일을 만들어 보세요. idea_spec.rb (<name_of_spec>_spec.rb).

새로 만든 파일 안에는 다음과 같이 작성해 보세요:

require "spec_helper"
require "idea"

그리고 명세 중 하나를 설명합니다.

describe Idea do
  it "has a title" # 예제 테스트를 여기에 적어보세요.
end

터미널에서 다음과 같이 실행해 보세요.

rspec spec/lib/idea_spec.rb

아직 구현되지 않았기 때문에 테스트가 보류 중인 것을 출력합니다.

COACH: 터미널에 출력된 것을 어떻게 구글링해볼지 얘기해 보세요.

그럼 다음과 같이 작성해봐요!

describe Idea do
  it "제목을 적으세요. 한글로 적어도 됩니다." do # 네, 대체적으로 'it'을 사용합니다.
    idea = Idea.new # Idea에 대한 새로운 '인스턴스'를 생성합니다.
    idea.title.should be_true # 예상되는 결과를 적습니다.
  end
end

좀 더 만족스러운 결과를 볼 수 있을 거예요.

리팩토링

아래처럼 작성할 수도 있습니다:

describe Idea do
  its(:title) { should be_true }
end

이렇게 작성하는 것이 좀 더 나아 보입니다. 하지만 마법처럼 엮여있는 거 같아 이해하기 어려워요. 지금 당장은 괜찮아 보일지 몰라도, 좀 더 경험이 쌓이면 큰 덩어리를 조금 더 작게 ‘리팩토링’할 수 있습니다.

COACH: 리팩토링에 대해 얘기해봐요.

To-do 목록으로 테스트 할 항목을 표시 해 놓기

To-do 목록은 놀랍습니다. RSpec의 멋진 기능은 특정 테스트를 보류 중으로 표시하는 것입니다. 앞으로 작성이 필요한 테스트 항목에 대해 적습니다.

예제의 몸체에서 doend 를 제거합니다. 이렇게요.

it "has a title"

테스트가 보류 중으로 표시됩니다. 한 번에 하나의 테스트를 처리하려는 더 큰 어플리케이션의 경우, 예제 앞에 x를 추가하여 읽을 수 있게 합니다.

describe Idea do  
  xit "has a title" do
end

여러분의 예제에 ‘보류 중’인 단어를 사용해 보세요.

Behavior-Driven Development

일반적으로 BDD 테스트는 약간 다른 방식으로 진행됩니다. 우리가 만들고자 하는 애플리케이션에 대해 생각하면서, 예상되는 결과를 작성한 후, 마음속에 있는 명세를 단계별로 단계적으로 구축합니다.

처음으로 작성할 것은

describe Idea do
  it "has a title"
    idea = Idea.new 
    idea.title.should be_true 
    # 혹은, 대안으로: idea.title.should == true
  end
end

그리고 아이디어 클래스를 소개하는idea.rb라는 파일을 만드세요.

class Idea
attr_accessor  :title
end

클래스를 구현하기 전에 터미널에서 rspec spec/lib/idea_spec.rb을 실행하면 에러가 발생합니다. 다행히 오류는 두려워할 필요가 없습니다. RSpec 오류는 실제로 필요한 코드를 작성하는 데 도움이 됩니다!

가이드를 따라 테스트를 작성하고 테스트하여 제대로 구현하였는지 확인해 보세요.

describe Attendee do
  it "tests everything"
end

그럼,

즐거운 테스팅 되세요!