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