12/08/2018, 09:29
Tìm hiểu về rspec trong rails
Tổng quan về Rspec Rspec là gì rspec là một gem rất mạnh trong ruby on rails nhằm mục đích kiểm thử các chức năng được viết bởi ruby on rails tại sao sử dụng rspec rspec có cú pháp rất ngắn gọn, dễ đọc dễ viết Test result dễ đọc hỗ trợ việc viết testkey tiện lợi. ...
Tổng quan về Rspec
Rspec là gì
- rspec là một gem rất mạnh trong ruby on rails nhằm mục đích kiểm thử các chức năng được viết bởi ruby on rails
tại sao sử dụng rspec
- rspec có cú pháp rất ngắn gọn, dễ đọc dễ viết
- Test result dễ đọc
- hỗ trợ việc viết testkey tiện lợi.
Cách cài đặt
- Install gem install rspec-rails
- config: Thêm rspec-rails vào group: :test và :development trong Gemfile
group :test, :development do gem 'rspec-rails', '~> 3.0.0' end
- run bundle install
- sau khi cài đặt rspec ta sẽ có cấu trúc thư mục như sau:
-- controller : nơi chứa các file test controller
-- model : chưas các file test model
-- factories : nơi chứa dữ liệu giả dùng trong quá trình test
connect database
- cách 1: lấy dữ liệ test từ databse. chỉnh sửa file: config/database.yml
test: adapter: mysql2 encoding: utf8 database: fels_db username: root password: ' host: 127.0.0.1 port: 3306
- cách 2: tạo dữ liệu test qua dữ liệu dữ liệu giả sử dụng FactoryGirl
-
- install factory girl : factory girl
-
- ví dụ: tạo dữ liệu ảo để test model
require 'faker' FactoryGirl.define do factory :user do |f| f.name {Faker::Name.name} f.email {Faker::Internet.email} f.password {"foobar"} f.password_confirmation {"foobar"} end end ### cấu trúc ```RUBY describe MyClass do describe ".class_method" do ... end describe "#instance_method" do ... end end
Cú pháp cơ bản
- ví dụ:
let(:category) {FactoryGirl.create :category} subject {category} describe "validates" do context "create is valid" do it {is_expected.to be_valid} end context "when name is not valid" do before {subject.name = ""} it {is_expected.not_to be_valid} end context "when name is too long" do before {subject.name = Faker::Lorem.characters(55)} it {is_expected.not_to be_valid} end end
- **describe ** : dùng để miêu tả chung cho 1 nhóm các test
describe 'test tong' do it '5 + 5 bang 10' do expect(5 + 5).to eq 10 end it '5 + 6 khac 10' do expect(5 + 6).to_not eq 10 end
- 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.
describe "validates" do context "create is valid" do it {is_expected.to be_valid} end
- it : dùng để mô tả test key.
it {is_expected.to be_valid}
- before dùng để nhóm các thao tác chung như tạo dữ liệu
- let : dùng để khởi tạo object
let(:category) {FactoryGirl.create :category}
- subject : xác định đối tượng object trong test key
let(:category) {FactoryGirl.create :category} subject {category} context "when name is too long" do before {subject.name = Faker::Lorem.characters(55)} it {is_expected.not_to be_valid} end end
-- trong ví dụ trên. sau khi qua before thì subject đã chuyển từ category thành category.name
- is_expected.not_to be_valid : hàm này có ý nghĩa kiểm tra xem đối tượng có qua được validate hay không
Matcher
- eq là phép so sánh bằng.
- **be_xxx ** là đặc trưng cho các matcher được kết thúc bằng ?. vs: be_empty, be_valid, ...
- be_truthy / be_falsey trả về giá trị true or false
- raise_errorcó thể kiểm tra được cả những lỗi phát sinh
- include kiểm tra xem 1 phần tử có nằm trong 1 mảng hay không
- be_within(Y).of(X) :giá trị trả về
- nằm trong khoảng X-Y đến X+Y
tư liệu tham khảo
- http://rspec.info/documentation/
- http://betterspecs.org/
- http://everydayrails.com