愛上ruby on rails三:rspec 單元測試

  1. gemfile添加:
group :development, :test do
  gem 'rspec-rails', '~> 5.0.0'
end
  1. bundle install
  2. bin/rails generate rspec:install
  3. bin/rails generate rspec:model user:生成spec/models/user_spec.rb;或者rails g rspec:request items生成請求測試文件
require 'rails_helper'  // 相當于import外面的一些幫助方法

RSpec.describe User, type: :model do
  it "有email" do
    user = User.new email: "xiaowu@qq.com"
    expect(user.email).to eq "xiaowu@qq.com"
  end
end
  1. 配置測試環(huán)境數(shù)據(jù)庫: database.yml配置:
test:
  <<: *default
  database: mangosteen_test
  username: mangosteen 
  password: 123456 
  host: db-for-mangosteen
  1. 創(chuàng)建數(shù)據(jù)庫:RAILS_ENV=test bin/rails db:create
  2. 創(chuàng)建表:RAILS_ENV=test bin/rails db:migrate
  3. bundle exec rspec

測試請求(Rspec每次請求完會自動清空數(shù)據(jù)表)

  1. bin/rails g rspec:request items 生成對應的items_spec.rb
  2. 代碼示例:
require "rails_helper"

RSpec.describe "Items", type: :request do
  describe "index by page" do
    it "works! (now write some real specs)" do
      11.times { Item.create amount: 100 }
      expect(Item.count).to eq(11)
      get "/api/v1/items"
      expect(response).to have_http_status(200)
      json = JSON.parse(response.body)
      expect(json["resources"].size).to eq(10)
      get "/api/v1/items?page=2&per_page=5"
      expect(response).to have_http_status(200)
      json = JSON.parse(response.body)
      expect(json["resources"].size).to eq(5)
    end
  end
  describe "create" do
    it "can create an item" do
      expect {
        post "/api/v1/items", params: { amount: 99 }
      }.to change { Item.count }.by(+1)
      expect(response).to have_http_status 200
      json = JSON.parse response.body
      expect(json["resource"]["id"]).to be_an(Numeric)
      expect(json["resource"]["amount"]).to eq 99
    end
  end
end

  1. bundle exec rspec
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容