Aggregating Failure Rspec

Đăng bởi Lưu Đại vào ngày 18-12-2022

Tình huống 

Hôm trước code mình có một đoạn Rspec cho action update như sau:
before { object.update attr1: val1, attr2: val2 }

it 'should update object correctly' do
  expect(object.reload.attr1).to eq val1
	expect(object.reload.attr2).to eq val2
end

Và thế là anh lead team mình comment mình một là tách ra thành nhiều it không thì phải sử dụng aggregating failures.
before { object.update attr1: val1, attr2: val2 }

it 'should update object correctly', :aggregate_failures do
  expect(object.reload.attr1).to eq val1
	expect(object.reload.attr2).to eq val2
end

Aggregate Failures là gì? 

Aggregate Failures là một API của rails để nhóm các expect lại và thấy tất cả failures trong 1 lần thay vì dừng lại ở expect fail đầu tiên. - dịch từ trang docs của relishapp
  • Khi chạy không dùng aggregate failures trong trường hợp object.attr1 bị update sai hoặc không được update thì khối này sẽ dừng ngay lại và rspec bị đỏ, mình không biết attr2 có được update đúng không do nó đã dừng chạy ở expect đầu. 
  • Khi chạy mà sử dụng aggregate failures tất cả các expect đều sẽ được check qua hết và trong trường hợp attr2 có bi lỗi hay cập nhật thành công thì Rspec cũng đều báo về cho mình.

Bonus

Ở phía trên mình sử dụng dạng metadata của aggregate failure. Tuy nhiên nó còn một dạng nữa là block. Dạng block viết cú pháp dài hơn nên anh TL comment mình nên sử dụng dạng metadata