RSpec - Người trợ giúp
Đôi khi các ví dụ RSpec của bạn cần một cách dễ dàng để chia sẻ mã có thể sử dụng lại. Cách tốt nhất để thực hiện điều này là với Helpers. Helpers về cơ bản là các phương thức Ruby thông thường mà bạn chia sẻ qua các ví dụ. Để minh họa lợi ích của việc sử dụng trình trợ giúp, hãy xem xét đoạn mã này:
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
Mã này rõ ràng, nhưng bạn nên giảm mã lặp lại bất cứ khi nào có thể. Chúng ta có thể lấy đoạn mã trên và giảm bớt sự lặp lại này bằng một phương thức trợ giúp được gọi là 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
Khi bạn chạy đoạn mã trên, bạn sẽ thấy đầu ra này:
..
Finished in 0.002 seconds (files took 0.11401 seconds to load)
2 examples, 0 failures
Như bạn có thể thấy, chúng tôi đã có thể đẩy logic để tạo và đưa một đối tượng chó vào một Trình trợ giúp cho phép các ví dụ của chúng tôi ngắn hơn và sạch hơn.