Làm quen với RSpec
Ruby
114
White

Ngoc Dao viết ngày 22/03/2016

Bạn đang dùng Rails? Mặc dù Rails đã tích hợp sẵn thư viện để test rất tiện rồi, nhưng bạn nghe nói có thư viện RSpec cho viết test theo phong cách BDD hay hơn nhiều nên muốn thử? Nào ta bắt đầu. Một khi đã bắt đầu được, mọi khúc mắc sẽ dần dần suôn sẻ. Như các bác lãnh đạo vẫn nói, hổng chỗ nào ta đắp chỗ đó.

Thêm RSpec vào project Rails của bạn

Khai báo trong tập tin Gemfile là project cần dùng thư viện rspec-rails:

group :development, :test do
  gem 'rspec-rails', '~> 3.0'
end

Download thư viện:

bundle install

Ngoài thư viện rspec-rails để làm cầu nối giữa RSpec và Rails, thư viện rspec (tức là bản thân RSpec) cũng sẽ được download.

Tạo thư mục spec ta sẽ viết các test viết bằng RSpec vào đấy:

rails generate rspec:install

Test thử cái gì trước?

Theo best practice "fat model, thin controller, stupid view", phần lớn code bạn để trong model. Như vậy để bắt đầu, nên viết unit test (RSpec gọi là spec) cho model trước. Khi đã quen tay, mới dần viết test cho các thứ khác và viết các loại test khác. Đây là cách tiếp cận theo "truyền thống" waterfall: viết chương trình trước, test sau. Như vậy là để bạn dễ làm quen với RSpec, còn khi đã quen, hãy thử theo viết test trước, viết chương trình sau, theo tinh thần BDD.

Ví dụ

Giả sử muốn test model UrlStripper ở app/models/url_stripper.rb:

class UrlStripper
  def self.strip(html)
    html.gsub(/<a .*?>(.*?)<\/a>/, '\1')
  end
end

Ta tạo thư mục spec/models. Ứng với UrlStripper, ta tạo tập tin spec/models/url_stripper_spec.rb:

require 'rails_helper'

describe UrlStripper do
  it 'should have good stripper' do
    input = '<a href="http://kipalog.com/">DIE HARD</a>'
    expected_output = 'DIE HARD'
    output = UrlStripper.strip(input)
    expect(output).to eq(expected_output)
  end
end

Chạy test

bundle exec rspec

Lệnh trên chạy tất cả các tập tin có dạng _spec.rb trong thư mục spec. Để chỉ chạy các test trong thư mục spec/models:

bundle exec rspec spec/models

Để chỉ chạy một test nào đó thay vì nhiều test cho đỡ mất thời gian (ví dụ khi đang viết thử test), ở lệnh trên hãy trỏ đến tận tập tin spec.

Làm gì tiếp theo?

Hãy chịu khó đọc tài liệu ở trang chủ của RSpec.

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Ngoc Dao

102 bài viết.
285 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
62 8
Làm thế nào để nâng cấp trang web mà không làm gián đoạn dịch vụ? Đây là câu hỏi phỏng vấn các công ty lớn thường hỏi khi bạn xin vào vị trí làm lậ...
Ngoc Dao viết hơn 2 năm trước
62 8
White
40 1
Bài viết này giải thích sự khác khác nhau giữa hai ngành khoa học máy tính (computer science) và kĩ thuật phần mềm (software engineering), hi vọng ...
Ngoc Dao viết hơn 2 năm trước
40 1
White
34 1
Nếu là team leader, giám đốc công ty hay tướng chỉ huy quân đội, vấn đề cơ bản bạn gặp phải là “hướng mọi người đi theo con đường bạn chỉ ra”. Thử...
Ngoc Dao viết hơn 2 năm trước
34 1
Bài viết liên quan
White
8 6
Chưa xem phần 2? Xem (Link) Trong bài viết này tôi giới thiệu cho các bạn về khái niệm function arity, một cách gọi mĩ miều của số lượng argument ...
Lơi Rệ viết gần 3 năm trước
8 6
White
8 1
Tiếp theo (Link) Mình sẽ hướng dẫn cách test căn bản cho API mình tạo. Thật ra mà nói thì mình phải viết test trước khi làm nhưng mà để tránh việc...
My Mai viết 3 năm trước
8 1
White
4 2
__Chú thích__: Đây là bản dịch tiếng Việt của bài viết gốc của tôi. Nếu bạn muốn xem bản tiếng Anh, xin hãy trỏ tới URL (Link) Lời mở (Link) là ...
Lơi Rệ viết hơn 3 năm trước
4 2
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
102 bài viết.
285 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!