gpt4 book ai didi

ruby - Controller 使用的测试服务的正确方法

转载 作者:数据小太阳 更新时间:2023-10-29 08:07:17 25 4
gpt4 key购买 nike

给定以下代码:

class FooController < ApplicationController
def create
if auth_is_alright && params_are_cool #pseudocode
@bar_results = BarService.new(param).run
end
end
end

class BarService
def initialize(params)
@transaction_token = params[:transaction_token]
@id = params[:id]
@quantity = params[:quantity]
@value = params[:value]
if Transaction.where(token: @transaction_token).any?
_undo_previous_run
end
end

def run
Transaction.new(token: @transaction_token, product_id: @id, quantity: @quantity, value: @value).save!
product = Product.find(id: @id)
product.update!(stock_quantity: product.stock_quantity - @quantity)
end

private

def _undo_previous_run
transaction = Transaction.find_by_token(@transaction_token)
product = Product.find(id: transaction.product_id)
product.update!(stock_quantity: product.stock_quantity + transaction.quantity)
transaction.destroy
end

end

现在我的问题是,测试 _undo_previous_run 行为的正确位置应该在哪里?:

  • BarServiceSpec?
  • FooControllerSpec? (调用创建操作等)
  • 其他?

最佳答案

测试通常用作类 API 的“文档”。 _undo_previous_run是私有(private)方法,不能直接访问。我更喜欢测试/描述公共(public)方法的行为。

在这种情况下,您需要测试 BarService.new 方法。

关于ruby - Controller 使用的测试服务的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38161773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com