PORO 測試

PORO: 即 Plain Old Ruby Object,就是一般的 Ruby Class 文件。

建議在寫 Rails 時,不論是 Controller、Model、Job 等時,都將複雜的邏輯抽到獨立的類別裡(Extract Object),比較好測試,錯誤發生時可以定位到單一的文件,好處多多。

PORO 在社群有許許多多種不同的分類:Service Object, Value Object, Command Object, Presenter Object, Decorator Object, Query Object 等,其實都是 Ruby Object,可以自己訂一個規範,一致性的採用這個規範,譬如以下的例子:

class WhatDoesThisObjectDo
  def initialize(arg1, arg2)
  end

  def call # run, perform, descriptive name
    # do something to arg1 & arg2
  end

  private

    attr_reader :arg1, :arg2
end

# 用法
# WhatDoesThisObjectDo.new(arg1, arg2).call

可以把邏輯封裝在這個 Class 裡,測試公開的方法(call)即可:

RSpec.describe WhatDoesThisObjectDo do
  describe "#call" do
    context "happy path" do
      it "example" do
        ...
      end
    end

    context "sad path" do
      it "example" do
        ...
      end
    end
  end
end

results matching ""

    No results matching ""