Rails 4:如何测试Controller Action

时间:2016-09-25 12:29:20

标签: ruby-on-rails ruby ruby-on-rails-4 testing rails-console

我如何实际测试这个Controller Action,我在我的PurchasesController中写道:

val toVec = udf((x: Double, y: Double) => Vectors.dense(x, y))

df.select(col(df.columns(2)), toVec(col(df.columns(3)), col(df.columns(4))))

最好使用我的Rails控制台?

路线:

protect_from_forgery except: [:hook]
def hook
    params.permit! # Permit all Paypal input params
    status = params[:payment_status]
    if status == "Completed"
        @purchase = Purchase.find(params[:invoice])
        @purchase.update_attributes(status: status, transaction_id: params[:txn_id], purchased_at: Time.now)
        @purchase.save!
        @user = @tool.user
        @user.earned_money += @tool.price
        @user.save!
    end
    render nothing: true
end

2 个答案:

答案 0 :(得分:1)

您不通过rails控制台测试控制器。

Rails中的控制器响应HTTP请求 - 它们在路由组件与传入请求匹配时进行实例化。因此,您将通过发送HTTP请求并检查响应来测试控制器。

您可以使用命令行工具cURL或基于浏览器的Postman手动测试您的控制器以发送请求*。您可以使用rails控制台检查副作用,例如数据库中的更改。

但是,您应该考虑使用自动测试工具,例如MinitestRSpec,因为手动测试您的应用程序是一种有缺陷的方法。

答案 1 :(得分:0)

我不能完全确定您可以通过控制台对其进行测试,除非您对正在执行的其他操作进行解耦/抽象,然后单独测试这些单元。使用RSpec / Minitest,您只需创建记录并对/hook路由发送请求,传递预期的参数:invoicetxn_idpayment_status

如果有帮助,请告诉我。