2016-09-25 76 views
0

如何实际测试这个控制器动作,我在PurchasesController写道:轨道4:如何测试控制器操作

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 
与我的Rails控制台

最好?

路线:

post "/purchases/:id" => "purchases#show" 
post "/hook" => "purchases#hook" 
+0

你想通过控制台进行测试吗? –

+0

@Shabini Rajadas我以为我可以将参数传递给路径并检查数据库是否工作......但是我做错了什么。那可能吗? – Gugubaight

回答

0

我不能完全肯定,你可以通过调音台进行测试,除非你去耦/抽象执行其他操作,然后你单独测试的单位。使用RSpec/Minitest,尽管您只需创建记录并对/hook路径发送邮寄请求,即可通过预期的参数:invoice,txn_id,payment_status

让我知道是否有帮助。

1

您不通过导轨控制台测试控制器。

Rails中的控制器响应HTTP请求 - 它们在路由组件与传入请求匹配时由它们实例化。所以你可以通过发送HTTP请求并检查响应来测试控制器。

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

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

+0

* - 有很多工具可以发送HTTP请求。这些只是两个非常受欢迎的例子。 – max

+0

您可以在控制台中实例化一个控制器,但它会要求您设置一个虚假的请求,并且需要关于轨道和机架如何工作的相当多知识。你不能只将参数传递给路径。 – max