iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 5
0
自我挑戰組

rails 學習紀錄系列 第 5

[Day 5 ] 關於Rspec 的簡單介紹

  • 分享至 

  • xImage
  •  

前言:什麼是Rspec

RSpec是一套Ruby語言底下的自動化測試框架,主要用於測試程式執行是否符合我們想要的結果,可在實際手動執行之前先讓程式自動進行測試,節省開發和維護的時間。由於RSpec強調其寫法非常口語化,有別於一般的測試語法,又稱BDD(Behaviour driven development)開發框架,意思是開發者可以將RSpec視為一種規格撰寫的說明書。在實際開發之前先將規格寫好,像是說明書一樣,接著再照這份「說明書」進行開發。這也是為何RSpec要將自己的每一個測試單元都稱為「specification」,字面上就是「規格」的意思。


以五倍上課的測試舉例

require 'rails_helper'  

RSpec.describe Cart, type: :model do
  let(:cart) { Cart.new }

  context "基本功能" do
    it "可以把商品丟到到購物車裡,然後購物車裡就有東西了" do
      cart.add_item 1

      expect(cart).not_to be_empty
    end

    it "如果加了相同種類的商品到購物車裡,購買項目(CartItem)並不會增加,但商品的數量會改變。" do
      3.times { cart.add_item 1 }
      3.times { cart.add_item 2 }
      2.times { cart.add_item 1 }

      expect(cart.items.count).to be 2
      expect(cart.items.first.quantity).to be 5
    end
  • 基礎語法介紹
    • require 'rails_helper' 是要讓我們可以使用Rails特別為RSpec設計的語法,所以每個spec檔案開頭都要加入這個敘述。
    • describe和context幫助你組織分類,都是可以任意套疊的。它的參數可以是一個類別,或是一個字串描述。通常最外層是我們想要測試的類別,然後下一層是哪一個方法,然後是不同的情境。
    • 每一個測試都是用 it...do 的方式進行。在裡面我們會用expect(…).to或expect(…).not_to來設定期望。
    • let(:name) { exp }
      • 有使⽤到才會運算,並且在同⼀個測試中多次呼叫會 Memoized快取起來。
      • 大略相等於下面寫法
      def cart
        @cart ||= Cart.new
      end
      

參考資料:
寫測試讓你更有信心 Part2
Ruby on Rails 實戰聖經
Rails 使用 RSpec 寫測試:基本說明及安裝篇


上一篇
[Day4]關於 index: true 跟 foreign_key: true (下)
下一篇
[Day6]關於Ruby 物件與類別(Class)的關係
系列文
rails 學習紀錄14
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言