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
正如您所看到的,我们能够将 create_and_walk_dog() 对象的逻辑推送到助手中,这使得我们的示例更短、更清晰。