Tìm hiểu về rspec trong rails
Bài đăng này đã không được cập nhật trong 3 năm
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
All rights reserved