2012-04-12 80 views
1

我對Rails應用程序進行了整合測試,該應用程序發佈到Braintree的透明重定向API。基本上測試會填寫有效數據的表單,並簡單地期望返回正確的響應。我並不試圖測試Braintree的每一個驗證 - 只需要一次測試來確保我的表單在大多數情況下都能正常工作。將表單發佈到外部URL失敗w/RoutingError測試時

然而,我的形式拋出這個錯誤:

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| 

相關行似乎是布倫特裏:: TransparentRedirect.url - 也許在這個測試環境會被截斷/丟失相關的主機信息?並非如此!輸出page.html中的測試顯示如下:

<form accept-charset="UTF-8" action="https://sandbox.braintreegateway.com:443/merchants/XXX/transparent_redirect_requests" autocomplete="off" method="post">

那麼爲什麼測試似乎嘗試打/商人......我自己的服務器上,而不是在數據發佈到sandbox.braintreegateway.com ,因爲表單的動作屬性明確指出?

此外,手動複製測試程序(用有效數據填寫表單,點擊提交)可用於開發和生產。

回答

2

Rails集成測試將所有請求發送到您的rails應用程序 - 該URL的主機部分將被忽略。

你也許可以用rspec的要求規格做到這一點,只要你使用合適的水豚的驅動程序 - 默認Rack::Test相對於主機相同的行爲,而是要像水豚,WebKit的或硒因素之一可能是不同的。