我有一个Rails应用程序的集成测试,它会发布到Braintree的透明重定向API。基本上,测试使用有效数据填充表单,并简单地期望返回正确的响应。我并不是要测试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?
此外,手动复制测试过程(使用有效数据填写表单,点击提交)在开发和生产中都有效。
发布于 2012-04-12 15:51:20
Rails集成测试将所有请求发送到rails应用程序- URL的主机部分被忽略。
只要你使用一个合适的水豚驱动程序,你就可以通过rspec请求规范做到这一点-默认的Rack::Test
对于主机具有相同的行为,但是像Capybara-webkit或者selenium驱动程序之一可能是不同的。
https://stackoverflow.com/questions/10126905
复制相似问题