12/08/2018, 18:11

1 số lưu ý khi dùng rspec

Chào các bạn, chắc hẳn những ai đã và đang làm việc với ngôn ngữ ruby cũng như ruby on rails cũng đều đã sử dụng rspec - 1 công cụ dùng để test những đoạn code chúng ta viết ra xem liệu chúng có chạy đúng theo spec và chức năng hay không. Hôm nay mình xin nêu ra 1 số tips nho nhỏ khi sử dụng rspec ...

Chào các bạn, chắc hẳn những ai đã và đang làm việc với ngôn ngữ ruby cũng như ruby on rails cũng đều đã sử dụng rspec - 1 công cụ dùng để test những đoạn code chúng ta viết ra xem liệu chúng có chạy đúng theo spec và chức năng hay không. Hôm nay mình xin nêu ra 1 số tips nho nhỏ khi sử dụng rspec để chúng ta có được những đoạn test dễ đọc dễ hiểu, mong các bạn theo dõi.

Khi viết test chúng ta nên tưởng tượng ra model mình đang viết test nên trông ra sao, và các hành vi của nó như thế nào. Ví dụ chúng ta có model User trông như thế này:

class User 
  validate :first_name, presence: true
  validate :last_name, presence: true
  validate :email_address, presence: true, uniqueness: true
end

Đoạn test của chúng ta sẽ có cấu trúc như sau:

describe User do 
  it "is valid with a first name, last name, email and password"
  it "is invalid without a fist name"
  it "is invalid without a last name"
  it "is invalid without an email address"
  it "is invalid with a duplicate email address"
end

Quy tắc này sẽ giúp chúng ta tìm ra lỗi nhanh hơn, đến thẳng chỗ đọan test bị fail và cũng như làm cho đoạn test sáng sủa dễ đọc hơn. Sau đây là ví dụ không tốt về việc không tuân theo quy tắc này:

BAD
it "creates a resource" do
  expect(response).to respond_with_content_type :json
  expect(response).to assign_to :resource
end

Chúng ta sẽ sửa lại như sau:

GOOD
it {is_expected.to respond_with_content_type :json}
it {is_expected.to assign_to :resource}

Đoạn mô tả sau it là tùy chọn chứ không bắt buộc, chúng ta có thể viết hoặc không, thậm chí không viết gì cả nhưng mình khuyên các bạn nên viết nó vì nếu không, các đoạn test của chúng ta nhìn sẽ rất khô khan, máy móc và thậm chí là rất khó đọc, sau này maintain code thì chỉ có nước vỡ mồm             </div>
            
            <div class=

0