2013-08-11 2 views
2

Я работаю на приложение Rails 4 и я хочу написать несколько тестов для Брэйнтри:Тест Брэйнтри с RSpec и водосвинки в Rails 4

с помощью RSpec-реек (2.14.0) и водосвинку (2.1.0) в Rails 4.0.0

проблема с на маршруте, в форме для Брэйнтри я передать: URL

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

Теперь, когда я запустить тест свойства, как этот:

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 

я получаю ошибку на маршруте:

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 с 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, он не требует запуска сервера. Однако это означает, что если ваше приложение не является приложением для стойки (Rails, Sinatra и большинство других фреймворков Ruby являются приложениями Rack), то вы не можете использовать этот драйвер. . Кроме того, вы не можете использовать драйвер RackTest для тестирования удаленного приложения или для доступа к удаленным URL-адресам (например, перенаправления на внешние сайты, внешних API-интерфейсов или служб OAuth), с которыми может взаимодействовать ваше приложение.

Как я обойти это то, что я написал драгоценный камень под названием fake_braintree_redirect, который вставляет часть промежуточного слоя в стек запросе во время тестовой среды, чтобы захватить эти запросы и реагировать соответствующим образом. Промежуточный добавляются в стек, используя initializer блок, определенный в application.rb, например:

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

Это занимает Braintree из уравнения полностью и возвращает успешный ответ всякий раз, когда вы отправляете данные.


В качестве альтернативы, если вы действительно хотите испытать против песочницы Braintree, вы могли бы перейти к драйверу JavaScript помечая свой scenario как:

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

Эй Райана, спасибо за Ваш ответ! Самое приятное, что у меня есть твоя книга (купленная на 19 ян), но в последнее время она не смотрела. Я использую ваш драгоценный камень, потому что я также смотрел [link] https://github.com/thoughtbot/fake_braintree, чтобы ускорить тесты. Но я не понимаю, что мой контрольный тест также не работает, как в примере с Braintree, но мой контрольный тест точно такой же! добавление: js => true с драйвером selenium дает мне странные ошибки sqlite в данный момент :( – Daniel

+0

О драйвере selenium и ошибке sqlite, я исправил это, заставляя все драйверы использовать одно и то же соединение [link] http: // stackoverflow .com/questions/8774227/why-not-use-shared-activerecord-connections-for-rspec-selenium. Что вам нужно сделать для некоторых тестов ... – Daniel

Смежные вопросы