RSpec - Đối tượng

Một trong những điểm mạnh của RSpec là nó cung cấp nhiều cách viết test, kiểm tra sạch. Khi các bài kiểm tra của bạn ngắn gọn và gọn gàng, bạn sẽ dễ dàng tập trung vào hành vi mong đợi hơn chứ không phải chi tiết về cách bài kiểm tra được viết. RSpec Subject là một phím tắt khác cho phép bạn viết các bài kiểm tra đơn giản.

Hãy xem xét mã này -

class Person 
   attr_reader :first_name, :last_name 
   
   def initialize(first_name, last_name) 
      @first_name = first_name 
      @last_name = last_name 
   end 
end 

describe Person do 
   it 'create a new person with a first and last name' do
      person = Person.new 'John', 'Smith'
      
      expect(person).to have_attributes(first_name: 'John') 
      expect(person).to have_attributes(last_name: 'Smith') 
   end 
end

Nó thực sự khá rõ ràng, nhưng chúng tôi có thể sử dụng tính năng chủ đề của RSpec để giảm số lượng mã trong ví dụ. Chúng tôi làm điều đó bằng cách di chuyển đối tượng người đó vào dòng mô tả.

class Person 
   attr_reader :first_name, :last_name 
   
   def initialize(first_name, last_name) 
      @first_name = first_name 
      @last_name = last_name 
   end 
	
end 

describe Person.new 'John', 'Smith' do 
   it { is_expected.to have_attributes(first_name: 'John') } 
   it { is_expected.to have_attributes(last_name: 'Smith') }
end

Khi bạn chạy mã này, bạn sẽ thấy đầu ra này:

.. 
Finished in 0.003 seconds (files took 0.11201 seconds to load) 
2 examples, 0 failures

Lưu ý, mẫu mã thứ hai đơn giản hơn bao nhiêu. Chúng tôi đã lấy mộtit block trong ví dụ đầu tiên và thay thế nó bằng hai it blocks mà cuối cùng yêu cầu ít mã hơn và cũng rõ ràng.