RSpec - Người trợ giúp

Đôi khi các ví dụ RSpec của bạn cần một cách dễ dàng để chia sẻ mã có thể sử dụng lại. Cách tốt nhất để thực hiện điều này là với Helpers. Helpers về cơ bản là các phương thức Ruby thông thường mà bạn chia sẻ qua các ví dụ. Để minh họa lợi ích của việc sử dụng trình trợ giúp, hãy xem xét đoạn mã này:

class Dog 
   attr_reader :good_dog, :has_been_walked 
   
   def initialize(good_or_not) 
      @good_dog = good_or_not 
      @has_been_walked = false 
   end 
   
   def walk_dog 
      @has_been_walked = true 
   end 
end 

describe Dog do 
   it 'should be able to create and walk a good dog' do 
      dog = Dog.new(true) 
      dog.walk_dog 
      
      expect(dog.good_dog).to be true
      expect(dog.has_been_walked).to be true 
   end 
   
   it 'should be able to create and walk a bad dog' do 
      dog = Dog.new(false) 
      dog.walk_dog 

      expect(dog.good_dog).to be false
      expect(dog.has_been_walked).to be true 
 
   end 
end

Mã này rõ ràng, nhưng bạn nên giảm mã lặp lại bất cứ khi nào có thể. Chúng ta có thể lấy đoạn mã trên và giảm bớt sự lặp lại này bằng một phương thức trợ giúp được gọi là create_and_walk_dog ().

class Dog
   attr_reader :good_dog, :has_been_walked 
   
   def initialize(good_or_not)
      @good_dog = good_or_not 
      @has_been_walked = false 
   end 
   
   def walk_dog 
      @has_been_walked = true 
   end 
end 

describe Dog do 
   def create_and_walk_dog(good_or_bad)
      dog = Dog.new(good_or_bad)
      dog.walk_dog
      return dog 
   end 
   
   it 'should be able to create and walk a good dog' do
      dog = create_and_walk_dog(true)
      
      expect(dog.good_dog).to be true
      expect(dog.has_been_walked).to be true 
   end 
   
   it 'should be able to create and walk a bad dog' do 
      dog = create_and_walk_dog(false)
      
      expect(dog.good_dog).to be false
      expect(dog.has_been_walked).to be true 
   end 
end

Khi bạn chạy đoạn mã trên, bạn sẽ thấy đầu ra này:

.. 
Finished in 0.002 seconds (files took 0.11401 seconds to load) 
2 examples, 0 failures

Như bạn có thể thấy, chúng tôi đã có thể đẩy logic để tạo và đưa một đối tượng chó vào một Trình trợ giúp cho phép các ví dụ của chúng tôi ngắn hơn và sạch hơn.