2013-08-11 6 views
2

나는 레일 4 응용 프로그램에서 일하고 있어요 그리고 난 브레인 트리에 대한 몇 가지 테스트를 작성하려면시험 브레인은 4

it 'should make new payment info' do 

    login 

    visit new_customer_path 

    page.fill_in 'customer_credit_card_number', :with => '4111111111111111' 
    page.fill_in 'customer_credit_card_expiration_date', :with => '01/25' 
    page.fill_in 'customer_credit_card_cvv', :with => '400' 
    page.click_button 'Save Payment Info' 

    page.should have_content('Payment Info Confirmation') 
    page.should have_content('411111******1111') 
    end 
:이 같은 기능 테스트를 실행할 때 해주기 URL

<%= form_for :customer, :url => Braintree::TransparentRedirect.url do |f| %> 

:) 레일에 4.0.0

문제는 브레인 트리의 형태로 난을 통과 경로에 함께

는 내가 경로에 오류가 발생합니다 :

Failure/Error: page.click_button 'Save Payment Info' 
ActionController::RoutingError: 
    No route matches [POST] "/merchants/fvn6vfc5ptyg2xrp/transparent_redirect_requests" 

나는 또한 컨트롤러 테스트에서 이것을 시도했습니다 (render_views과) :

it 'should make new payment info' do 
    sign_in_as_user 

    visit new_customer_path 

    page.fill_in 'customer_credit_card_number', :with => '4111111111111111' 
    page.fill_in 'customer_credit_card_expiration_date', :with => '01/25' 
    page.fill_in 'customer_credit_card_cvv', :with => '400' 
    page.click_button 'Save Payment Info' 
    save_and_open_page 
    page.should have_content('Payment Info Confirmation') 
    page.should have_content('411111******1111') 
    end 

같은 오류가 경로에 ...

브라우저에서 env가 제대로 작동합니다. 내 양식의 url 옵션이 capybara에 의해 무시됩니다. 아무도 나를 도울 수 있을지 궁금해?

Braintree with Rails의 응용 프로그램 : https://github.com/braintree/braintree_ruby_examples/blob/master/rails3_tr_devise/spec/controllers/customer_controller_spec.rb이 프로젝트에서 테스트를 실행할 때 .. 내 문제는 Rails 및 rspec 버전과 관련이 있습니까?

미리 감사드립니다.

답변

4

사실 내 Multitenancy with Rails 도서에서 정확한 시나리오를 커버.

테스트와 Braintree 프로젝트의 테스트의 차이점은 테스트가 Capybara 기능이고 그 테스트가 컨트롤러 사양이라는 것입니다.

나는이 책에서 this relevant part of Capybara's README을 언급 :

RackTest는 카피 바라의 기본 드라이버입니다. 순수 Ruby로 작성되었으며 은 JavaScript 실행을 지원하지 않습니다. RackTest 드라이버는 을 Rack 인터페이스와 직접 상호 작용하기 때문에 서버를 시작할 필요가 없습니다. 그러나 이것은 응용 프로그램이 Rack 응용 프로그램 (Rails, Sinatra 및 대부분의 다른 Ruby 프레임 워크가 Rack 응용 프로그램)이 아닌 경우 이 드라이버를 사용할 수 없음을 의미합니다. 또한 RackTest 드라이버를 사용하여 원격 응용 프로그램을 테스트하거나 응용 프로그램과 상호 작용할 수있는 원격 URL (예 : 외부 사이트, 외부 API 또는 OAuth 서비스로 리디렉션)에 액세스 할 수 없습니다.

나는 그것을 극복하는 방법은 내가 이러한 요청을 캡처하고 적절하게 대응할 수있는 테스트 환경 동안 요청 스택에 미들웨어의 조각을 삽입 fake_braintree_redirect라는 보석을 쓴 것입니다. 미들웨어는 다음과 같이, application.rb 내에서 정의 된 initializer 블록을 사용하여 스택에 추가됩니다

initializer 'middleware.fake_braintree_redirect' do 
    if Rails.env.test? 
    require 'fake_braintree_redirect' 
    config.middleware.use FakeBraintreeRedirect 
    end 
end 

이 완전히 방정식에서 브레인을 소요하고 당신이 그것을 데이터를 전송할 때마다 성공적인 응답을 반환합니다.

scenario "foo", :js => true 
+0

안녕 라이언, 감사에 대한 당신의 대답 : 당신이 정말 브레인 트리의 샌드 박스에 대해 테스트하려는 경우


또는, 당신은 당신의 scenario 같은 태그로 자바 스크립트 드라이버로 전환 할 수 있습니다! 멋진 점은 당신 책 (19 일에 구입 한 책)을 가지고 있지만 요즘에는 책을 들여다 보지 못했다는 것입니다. 테스트를 빨리하기 위해 [링크] https://github.com/thoughtbot/fake_brainree를보고 있었으므로 보석을 사용하겠습니다. 하지만 내가 얻지 못하는 것은 내 컨트롤러 테스트가 braintree 예제와 같이 작동하지 않지만 컨트롤러 테스트가 정확히 동일하다는 것입니다. 추가 : js => 셀렌 드라이버와 사실이 날 이상한 sqlite 오류를 준다 : ( – Daniel

+0

셀렌 드라이버와 sqlite 오류에 대해, 나는 그 같은 연결을 사용하여 모든 드라이버를 강제로 수정했습니다 [링크] http : // stackoverflow .com/questions/8774227/why-not-use-shared-activerecord-connections-for-rspec-selenium. 몇 가지 테스트를 위해해야 ​​할 일은 ... – Daniel