Cách tạo API với Rails (phần 2) Viết test case

Tiếp theo Cách tạo API với Rails (phần 1)
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 gây khó hiểu nên mình xin mạn phép đảo ngược qui trình.

Để thuận lợi hơn cho việc viết test case mình sử dụng gem rspec-rails

Test case thuộc tính của model mình đã tạo

Để dễ dàng hơn trong việc viết test case mình sử dụng thêm 2 gem:

Chúng ta tạo lại model traveler

rails g model traveler first_name:string last_name:string birthday:datetime gender:string

Bây giờ cấu trúc app của chúng ta sẽ xuất hiện thêm phần này ( màu xanh lá cây)

alt text

Tạo fixture data

Vào file sau spec/factories/travelers.rb để kiểm tra lại fixture data mà FactoryGirls đã tạo. Mình sẽ edit lại một tí ( dựa vào gem ffake )

FactoryGirl.define do
  factory :traveler do
    first_name { FFaker::Name.first_name }
    last_name { FFaker::Name.last_name }
    birthday { FFaker::IdentificationESCO.expedition_date }
    gender { FFaker::Gender.maybe }
  end
end

Test các thuộc tính của model

Bạn tạo model cho traveler và test cho traveler nên bạn sẽ viết test case tại file traveler_spec.rb

Vào file sau spec/models/traver_spec.rb để viết test case

require 'rails_helper'

describe Traveler do
  before { @traveler = FactoryGirl.build(:traveler) }

  subject { @traveler }

  it { should respond_to(:first_name) }
  it { should respond_to(:last_name) }
  it { should respond_to(:gender) }
  it { should respond_to(:birthday) }
end

Kiểm tra kết quả của test case
Tại terminal bạn gõ theo cấu trúc rspec **đường đẫn file muốn test**

rspec spec/models/traveler_spec.rb

alt text

Test respond trả về khi request api

  • Test response code trả về thành công là 200
  • Test data trả về gồm những thành phần gì
require 'spec_helper'

describe V1::TravelersController do
  before do
    @traveler = FactoryGirl.create :traveler
    get "/v1/travelers", format: :json
  end

  it 'return traveler information' do
    traveler = JSON.parse(response.body, symbolize_names: true).first
    expect(traveler[:first_name]).to eql @traveler.first_name
    expect(traveler[:last_name]).to eql @traveler.last_name
    expect(traveler[:gender]).to eql @traveler.gender
    expect(traveler[:birthday].to_s.to_i).to eql @traveler.birthday.to_s.to_i
  end

  it 'response code' do
    expect(response).to have_http_status(200)
  end
end

Run lệnh này để kiểm tra kết quả

rspec spec/requests/v1/travelers_controller_spec.rb

alt text

Xem code chi tiết tại đây https://github.com/mymai91/travel-api/tree/test-traveler-api

Yah! đã xong

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

My Mai

33 bài viết.
177 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
21 8
Lotus là gì? (Link) là một Ruby Web Framework mới với chú trọng vào cấu trúc tách rời với thiết kế đơn giản và dễ hiểu. Hiện tại thì Lotus vừa re...
My Mai viết 3 năm trước
21 8
White
19 21
Bạn muốn load 3 image khác nhau (Ý mình ở đây là dùng tag không phải background nhé) cho 3 loại màn hình khác nhau (small, medium, large). Bạn sẽ l...
My Mai viết 3 năm trước
19 21
White
19 9
Tham gia cộng đồng Thoáng đó cũng đã 2 năm từ lúc tớ tham gia cộng đồng Ruby Việt Nam. Giờ ngồi ngẫm lại được gì và mất gì :v Thật thì chẳng mất...
My Mai viết gần 2 năm trước
19 9
Bài viết liên quan
White
7 4
Nếu ai đã làm Rails thì không còn lạ lẫm gì với chức năng Migration của Rails. Nếu ai chưa biết thì tôi xin giới thiệu sơ qua chức năng này. Rails ...
Lơi Rệ viết 3 năm trước
7 4
White
0 0
Performance regression in ActiveRecord model instance creation in Rails 4.1.x When you guys met the performance issue in Rails 4.1.x. And after be...
Luu Nguyen viết gần 2 năm trước
0 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

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


White
{{userFollowed ? 'Following' : 'Follow'}}
33 bài viết.
177 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á!