📅  最后修改于: 2020-12-06 10:57:32             🧑  作者: Mango
有时,您的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
如您所见,我们能够将创建和移动狗对象的逻辑推入帮助器中,从而使我们的示例更短,更清晰。