Rspec-helpers

提供:Dev Guides
移動先:案内検索

RSpec-ヘルパー

RSpecの例には、再利用可能なコードを簡単に共有する方法が必要な場合があります。 これを達成する最良の方法は、ヘルパーを使用することです。 ヘルパーは基本的に通常のRubyメソッドであり、サンプル間で共有します。 ヘルパーを使用する利点を説明するために、このコードを考えてみましょう-

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

このコードは明確ですが、可能な限り繰り返しコードを減らすことを常にお勧めします。 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

上記のコードを実行すると、この出力が表示されます-

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

ご覧のとおり、犬のオブジェクトを作成して、ヘルパーを作成するためのロジックをプッシュすることができました。これにより、例がより簡潔になります。