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
ご覧のとおり、犬のオブジェクトを作成して歩くためのロジックをヘルパーにプッシュすることができました。これにより、例をより短く、よりクリーンにすることができます。