我对发布到 Braintree 的透明重定向 API 的 Rails 应用程序进行了集成测试。基本上,测试用有效数据填写表格,并且只期望得到正确的响应。我并不是要测试 Braintree 的每一项验证——只需要一个测试来确保我的表单在大多数情况下都能正常工作。
但是,我的表单抛出了这个错误:
1) Braintree CreditCard integration creates a credit card on Braintree and locally
Failure/Error: click_on 'Add card'
ActionController::RoutingError:
No route matches [POST] "/merchants/XXX/transparent_redirect_requests"
有问题的 form_for 助手看起来像:
=form_for :credit_card, :params => @result && @result.params[:credit_card],
:errors => @result && @result.errors.for(:credit_card),
:builder => ApplicationHelper::BraintreeFormBuilder,
:url => Braintree::TransparentRedirect.url,
:html => {:autocomplete => "off"} do |f|
相关行似乎是 Braintree::TransparentRedirect.url - 也许在测试环境中这会被截断/丢失相关主机信息?不是这样!为测试输出 page.html 显示以下内容:
<form accept-charset="UTF-8" action="https://sandbox.braintreegateway.com:443/merchants/XXX/transparent_redirect_requests" autocomplete="off" method="post">
那么,为什么测试似乎试图在我自己的服务器上点击 /merchants... 而不是将数据发布到 sandbox.braintreegateway.com,正如表单的操作属性明确指出的那样?
此外,手动复制测试程序(用有效数据填写表格,点击提交)在开发和生产中都有效。