RSpec - ผู้ช่วยเหลือ
บางครั้งตัวอย่าง RSpec ของคุณต้องการวิธีง่ายๆในการแบ่งปันโค้ดที่ใช้ซ้ำได้ วิธีที่ดีที่สุดในการทำสิ่งนี้คือ Helpers ผู้ช่วยเหลือเป็นวิธีปกติของ 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
อย่างที่คุณเห็นเราสามารถผลักดันตรรกะในการสร้างและเดินสิ่งของสุนัขให้เป็นตัวช่วยซึ่งทำให้ตัวอย่างของเราสั้นลงและดูสะอาดขึ้น