RSpec - Helfer

Manchmal benötigen Ihre RSpec-Beispiele eine einfache Möglichkeit, wiederverwendbaren Code freizugeben. Der beste Weg, dies zu erreichen, ist mit Helfern. Helfer sind im Grunde reguläre Ruby-Methoden, die Sie anhand von Beispielen teilen. Um den Nutzen der Verwendung von Helfern zu veranschaulichen, betrachten wir diesen Code:

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

Dieser Code ist klar, aber es ist immer eine gute Idee, wiederholten Code nach Möglichkeit zu reduzieren. Wir können den obigen Code verwenden und einen Teil dieser Wiederholung mit einer Hilfsmethode namens create_and_walk_dog () reduzieren.

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

Wenn Sie den obigen Code ausführen, wird diese Ausgabe angezeigt -

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

Wie Sie sehen können, konnten wir die Logik zum Erstellen und Gehen eines Hundeobjekts in einen Helfer übertragen, wodurch unsere Beispiele kürzer und sauberer werden.