1

我对发布到 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,正如表单的操作属性明确指出的那样?

此外,手动复制测试程序(用有效数据填写表格,点击提交)在开发和生产中都有效。

4

1 回答 1

2

Rails 集成测试将所有请求发送到您的 Rails 应用程序 - URL 的主机部分被忽略。

只要您使用合适的 capybara 驱动程序,您就可以使用 rspec 请求规范执行此操作 - 默认值Rack::Test对于主机具有相同的行为,但 Capybara-webkit 或其中一个 selenium 驱动程序可能会有所不同。

于 2012-04-12T15:51:20.180 回答