Rspec + Capybara: не определено last_response - PullRequest
5 голосов
/ 04 августа 2011

Я настраиваю свою тестовую среду с помощью Rspec + Capybara, но я получаю этот неопределенный last_response.Я искал через сеть и ТАК.Я нашел несколько вещей о версии, используйте git repo вместо источника rubygem и т. Д. Но это не меняет подсказку для меня.

Вот обратный ход: rspec --backtrace spec / controllers / api / plist/providers_listing_spec.rb Сбои:

1) Api::Plist::ProvidersController should return a successfull plist containing a list of providers
 Failure/Error: last_response.status.shoud be_success
 NameError:
   undefined local variable or method `last_response' for #<RSpec::Core::ExampleGroup::Nested_1:0x105658e10>
 # ./.gems/ruby/1.8/gems/rspec-expectations-2.6.0/lib/rspec/matchers/method_missing.rb:9:in `method_missing'
 # ./.gems/ruby/1.8/gems/actionpack-3.0.5/lib/action_dispatch/testing/assertions/routing.rb:175:in `method_missing'
 # ./spec/controllers/api/plist/providers_listing_spec.rb:19
 # /Library/Ruby/Gems/1.8/gems/rspec-core-2.6.4/lib/rspec/core/example.rb:48:in `instance_eval'
 # /Library/Ruby/Gems/1.8/gems/rspec-core-2.6.4/lib/rspec/core/example.rb:48:in `run'
 # /Library/Ruby/Gems/1.8/gems/rspec-core-2.6.4/lib/rspec/core/example.rb:107:in `with_around_hooks'
 # /Library/Ruby/Gems/1.8/gems/rspec-core-2.6.4/lib/rspec/core/example.rb:45:in `run'
 # /Library/Ruby/Gems/1.8/gems/rspec-core-2.6.4/lib/rspec/core/example_group.rb:294:in `run_examples'
 # /Library/Ruby/Gems/1.8/gems/rspec-core-2.6.4/lib/rspec/core/example_group.rb:290:in `map'
 # /Library/Ruby/Gems/1.8/gems/rspec-core-2.6.4/lib/rspec/core/example_group.rb:290:in `run_examples'
 # /Library/Ruby/Gems/1.8/gems/rspec-core-2.6.4/lib/rspec/core/example_group.rb:262:in `run'
 # /Library/Ruby/Gems/1.8/gems/rspec-core-2.6.4/lib/rspec/core/command_line.rb:24:in `run'
 # /Library/Ruby/Gems/1.8/gems/rspec-core-2.6.4/lib/rspec/core/command_line.rb:24:in `map'
 # /Library/Ruby/Gems/1.8/gems/rspec-core-2.6.4/lib/rspec/core/command_line.rb:24:in `run'
 # /Library/Ruby/Gems/1.8/gems/rspec-core-2.6.4/lib/rspec/core/reporter.rb:12:in `report'
 # /Library/Ruby/Gems/1.8/gems/rspec-core-2.6.4/lib/rspec/core/command_line.rb:21:in `run'
 # /Library/Ruby/Gems/1.8/gems/rspec-core-2.6.4/lib/rspec/core/runner.rb:80:in `run_in_process'
 # /Library/Ruby/Gems/1.8/gems/rspec-core-2.6.4/lib/rspec/core/runner.rb:69:in `run'`

Вот мой конфиг gem для тестирования:

gem 'ruby-prof' # perf
gem 'rspec-rails', :git => 'git://github.com/rspec/rspec-rails.git'
gem 'shoulda' # Shoulda
gem 'factory_girl_rails' #=> mocking
gem 'capybara', :git => "http://github.com/jnicklas/capybara.git" 
gem 'database_cleaner'

gem 'rb-fsevent', :require => false if RUBY_PLATFORM =~ /darwin/i #guard mac dependency

gem 'guard-livereload' # browser reloading
gem 'guard-rspec'
gem 'guard-test'
gem 'growl' #grow notification

Я использую database_clearner для работы с dong монго ...

И до сих пор я действительно не использую:

require 'spec_helper'

describe Api::Plist::ProvidersController, :type => :api do
  let (:user) {Factory(:confirmed_user)}
  let (:api_account) {user.new_api_account}
  let (:api_token) {api_account.authentication_token}
  let (:email) {api_account.email}

  it "should return a successfull plist containing a list of providers" do
    get 'index', :auth_token => api_token, :email => email
    last_response.status.shoud be_success
    last_response.body.should eql({:sucess => true}.to_plist.to_s)
  end
end

Вот сообщения, которые я уже прочитал, даже если они говорят в основном о вебрат ...:

Если у кого-нибудь есть представление о том, что делать, какую версию гема использовать?

Ответы [ 3 ]

7 голосов
/ 19 июля 2013

Вы можете добавить ...

config.include Rack::Test::Methods

на ваш spec_helper.rb. Это добавит last_response ... и другие методы ... к всем вашим тестам.

Поскольку вам, вероятно, не нужно этого делать, лучше добавить их по мере необходимости из модуля. Создайте вспомогательный модуль в вашей папке spec / support. Затем добавьте этот код:

module ApiHelper
  include Rack::Test::Methods
  def app
    Rails.application
  end
end

RSpec.configure do |c|
  c.include ApiHelper, type: :api
end

Теперь :type => :api вы на самом деле будете что-то делать, а именно добавлять Rack :: Test :: Methods к этой спецификации.

describe Api::Plist::ProvidersController, :type => :api do
  # etc
end
0 голосов
/ 17 июня 2012

last_response - это стойка / тестовая вещь.Если вы не используете его, его необходимо удалить.

0 голосов
/ 07 августа 2011

Это было недоразумение Rspec. "last_response" не существует. Он должен быть предоставлен через модуль поддержки или как угодно.

...