RSpec-스텁

RSpec Doubles (일명 Mocks)에 대한 섹션을 이미 읽었다면 RSpec 스텁을 이미 보신 것입니다. RSpec에서 스텁은 종종 Method Stub이라고 불리며, 기존 메소드 또는 아직 존재하지 않는 메소드에 대해“대기”하는 특별한 유형의 메소드입니다.

다음은 RSpec Doubles 섹션의 코드입니다.

class ClassRoom 
   def initialize(students) 
      @students = students 
   End
   
   def list_student_names 
      @students.map(&:name).join(',') 
   end 
end 

describe ClassRoom do 
   it 'the list_student_names method should work correctly' do 
      student1 = double('student') 
      student2 = double('student') 
      
      allow(student1).to receive(:name) { 'John Smith'}
      allow(student2).to receive(:name) { 'Jill Smith'} 
      
      cr = ClassRoom.new [student1,student2]
      expect(cr.list_student_names).to eq('John Smith,Jill Smith') 
   end 
end

이 예제에서 allow () 메서드는 ClassRoom 클래스를 테스트하는 데 필요한 메서드 스텁을 제공합니다. 이 경우 Student 클래스의 인스턴스처럼 작동 할 객체가 필요하지만 해당 클래스는 실제로 존재하지 않습니다 (아직). Student 클래스는 name () 메서드를 제공해야하며 allow ()를 사용하여 name ()에 대한 메서드 스텁을 만듭니다.

한 가지 주목할 점은 RSpec의 구문이 수년에 걸쳐 약간 변경되었다는 것입니다. 이전 버전의 RSpec에서 위의 메서드 스텁은 다음과 같이 정의됩니다.

student1.stub(:name).and_return('John Smith') 
student2.stub(:name).and_return('Jill Smith')

위의 코드를 가져 와서 allow() 이전 RSpec 구문을 사용하는 행-

class ClassRoom 
   def initialize(students) 
      @students = students 
   end 
   
   def list_student_names 
      @students.map(&:name).join(',') 
   end 
	
end 

describe ClassRoom do 
   it 'the list_student_names method should work correctly' do 
      student1 = double('student') 
      student2 = double('student')
      
      student1.stub(:name).and_return('John Smith')
      student2.stub(:name).and_return('Jill Smith') 
      
      cr = ClassRoom.new [student1,student2] 
      expect(cr.list_student_names).to eq('John Smith,Jill Smith') 
   end 
end

위의 코드를 실행하면이 출력을 볼 수 있습니다.

.
Deprecation Warnings:

Using `stub` from rspec-mocks' old `:should` syntax without explicitly 
   enabling the syntax is deprec 

ated. Use the new `:expect` syntax or explicitly enable `:should` instead. 
   Called from C:/rspec_tuto 

rial/spec/double_spec.rb:15:in `block (2 levels) in <top (required)>'.
If you need more of the backtrace for any of these deprecations 
   to identify where to make the necessary changes, you can configure 

`config.raise_errors_for_deprecations!`, and it will turn the 
   deprecation warnings into errors, giving you the full backtrace.

1 deprecation warning total

Finished in 0.002 seconds (files took 0.11401 seconds to load)
1 example, 0 failures

RSpec 예제에서 메서드 스텁을 생성해야 할 때 새로운 allow () 구문을 사용하는 것이 좋지만 여기에서는 이전 스타일을 제공하여 사용자가 볼 때 인식 할 수 있도록합니다.