Skip to content

Dashboard

Đôi điều về Unit Test va Rspec

Created by Admin

Unit test

  1. Khái niệm
    • Unit test là mức độ kiểm thử nhỏ nhất trong quy trình kiểm thử phần mềm. Unit test kiểm thử các đơn vị nhỏ nhất trong mã nguồn như method, class, module...Do đó Unit test nhằm kiểm tra mã nguồn của các chương trình, các chức năng riêng rẽ hoạt động đúng hay không.
    • Unit testing được thực hiện bởi lập trình viên.
  2. Trạng thái UT
    • Fail (trạng thái lỗi).
    • Ignore (tạm ngừng thực hiện).
    • Pass (trạng thái làm việc).
  3. Ứng dụng UT
    • Kiểm tra mọi đơn vị nhỏ nhất là các thuộc tính, sự kiện, thủ tục và hàm.
    • Kiểm tra các trạng thái và ràng buộc của đối tượng ở các mức sâu hơn mà thông thường chúng ta không thể truy cập được.
  4. Thiết kế UT
    • Mỗi UT đều được thiết kế theo trình tự sau
      • Thiết lập các điều kiện cần thiết: khởi tạo các đối tượng, xác định tài nguyên cần thiết, xây dựng các dữ liệu giả…
      • Gọi các phương thức cần kiểm tra.
      • Kiểm tra sự hoạt động đúng đắn của các phương thức.
      • Dọn dẹp tài nguyên sau khi kết thúc kiểm tra
    • Những lưu ý khi viết một test cho một controller Trạng thái trả về của phương thức Controller có render template mong muốn không? Controller có render layout mong muốn không? Controller có tạo flash messages hay không? Thông tin có thay đổi hay bị xóa bỏ hay không?
  • Rspec
  1. Khái niệm

    • RSpec là một trong những testing framework phổ biến nhất cho Ruby.
    • RSpec-rails là một mở rộng của RSpec, cho phép bạn viết unit tests cho controller, views, helpers và model trong ứng dụng Rails.
  2. Cài đặt rspec-rails

    • Thêm gem "rspec-rails" vào Gemfile và chạy bundle install group :development,:test do gem "rspec-rails" end
    • Thêm vào cả :development là để khi generate model/controller, file spec cho model/controller đó sẽ tự động được thêm vào mà không cần dùng RAILS_ENV=test.
    • Khởi tạo và chạy rspec: rails generate rspec:install
    • Chạy các file rspec: bundle exec rspec.
    • Để chạy 1 file cụ thể nào đó: bundle exec rspec spec/models/book_spec.rb bundle rspec -f document spec/models/book_spec.rb
    • Matcher
    • Ví dụ:

    image.png

Cú pháp cơ bản

  • it: dùng để mô tả test key.

    image.png

  • describe: dùng để miêu tả chung cho 1 nhóm các test

    image.png

  • context: cũng dùng để miêu tả cho một nhóm các test key nhưng. dùng để phân nhánh test key theo từng trường hợp.

    image.png

  • before, after: dùng để nhóm các thao tác chung như tạo dữ liệu.

    image.png

  • let: dùng để khởi tạo object. let! thì nó sẽ chạy cái FactoryBot.create luôn

image.png

  • subject: xác định đối tượng object trong test key.

    let(:category) {FactoryGirl.create :category} subject {category} image.png

  1. Database cleaner
  • Config database

image.png - Dùng để xóa sạch toàn bộ cơ sở dữ liệu sau mỗi lần chạy test. Tức là sau khi chạy xong một test nó sẽ rollback database lại trạng thái trước khi chạy test, đảm bảo database luôn nhất quán trong suốt quá trình thực hiện tất cả các test case. - Cài đặt:

image.png

  • Nếu sử dụng nhiều ORM thì chúng ta thêm gem (gem 'database_cleaner-redis')
  • Chi tiết tại: https://github.com/DatabaseCleaner/database_cleaner
  • Cách sử dụng
    • Trong file rails_helper ta thêm dòng sau: config.use_transactional_fixtures = false
    • Trong thư mục spec, tạo thư mục support, trong đây thêm tạo thêm file database_cleaner.rb và paste thêm đoạn code sau: image.png
  1. Factorybot(tên cũ facetorygirl)
  • Cho phép chúng ta tạo ra các object cần thiết cho việc test với các giá trị mặc định, kết hợp cùng với Faker chúng ta có thể tạo ra các object(factory) với giá trị ngẫu nhiên thay vì chỉ sử dụng giá trị mặc định.
  • Thêm vào gem file: gem "factory_bot_rails"
  • Run bundle install
  • Tạo một subject:
  1. Shoulda Matchers
    • Hỗ trợ viết test trên 1 dòng khiến tăng tốc độ code, giảm sự phức tạp, ít nhầm lẫn ngoài ý muốn
    • Thêm vào gem file

image.png

Khi viết bình thường image.png

Khi sử dụng sholda match

image.png

Một ví dụ về test mối quan hệ has_many : Cú pháp Rspec:

image.png

Cú pháp Rspec + Shoulda Matchers :

image.png

Source: https://viblo.asia/p/doi-dieu-ve-unit-test-va-rspec-maGK7vj95j2