我正在使用 rspec 和 capybara 编写测试用例以与 Cheddargetter(支付解决方案提供商)集成。我在测试我对 CG API 的请求时没有问题,但是我不确定当 CG 的 API 向 Rails 应用程序提供 Web 回调时如何进行最佳测试。
这类似于 PayPal 的 IPN 功能,在客户支付后,网络挂钩回调将发送到您的应用程序。
只是想知道是否有人知道测试/模拟这个的最佳方法是什么?
我正在使用 rspec 和 capybara 编写测试用例以与 Cheddargetter(支付解决方案提供商)集成。我在测试我对 CG API 的请求时没有问题,但是我不确定当 CG 的 API 向 Rails 应用程序提供 Web 回调时如何进行最佳测试。
这类似于 PayPal 的 IPN 功能,在客户支付后,网络挂钩回调将发送到您的应用程序。
只是想知道是否有人知道测试/模拟这个的最佳方法是什么?
您可能正在使用控制器来处理POST
请求,我们称之为WebhookController
您可以简单地测试一个带有您需要的参数的帖子正在做您想做的事情。例如,我集成测试(在测试单元中,但 rspec 做同样的事情)。
Rspec 可能具有fixture_file_upload
用于上传/添加 xml 文件的不同版本,但根据此堆栈问题,您似乎也可以使用它。将文件粘贴在 say 中spec/files
。
无论如何,对于网络和菜鸟,您将Delayed::Job
在另一个测试中测试您的呼叫是否确实有效。就像是:
class GetWebhookTest < ActionController::IntegrationTest
fixtures :all
def recieve_webhook
post '/webhook/338782', fixture_file_upload('webhook.xml', 'application/xml')
end
#Test you do what the outcome of your POST would be.
#this is refactored but you can shove the post line where receive_webhook is
test "recieve a webhook via xml" do
assert_difference('RawData.count') do
receive_webhook
end
end
test "make sure the status is 200" do
recieve_webhook
assert_response :success
end
#Test 1 will fail before this, but i was more/too thorough back in the day
test "Delayed Job increases" do
assert_difference "Delayed::Job.count", 1 do
recieve_webhook
end
end
end
同样,Rspec 也有类似response.should be_success
Object.count 的差异方法。根据您的情况进行调整。关键是fixture_file_upload