【发布时间】:2016-11-04 19:57:30
【问题描述】:
给定下面的代码:
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? (调用创建操作等)
- 其他?
【问题讨论】:
标签: ruby ruby-on-rails-4 rspec tdd