2011-08-04 27 views
5

Tôi đang thiết lập môi trường thử nghiệm của mình với Rspec + Capybara, nhưng tôi nhận được last_response không xác định này. Tôi đã tìm kiếm thông qua web và SO. Tôi tìm thấy một vài điều về phiên bản, sử dụng git repo thay vì nguồn rubygem vv ... Nhưng nó không thay đổi một đầu mối cho tôi.Rspec + Capybara: undefined last_response

Ở đây backtrace: rspec --backtrace đặc tả/controllers/api/plist/providers_listing_spec.rb thất bại:

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'` 

Dưới đây là cấu hình đá quý của tôi để kiểm tra:

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 

tôi đang sử dụng database_clearner để xử lý với mongo db ...

Và cho đến bây giờ tôi không thực sự sử dụng:

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 

Sau đây là các bài viết Tôi đã đọc, ngay cả khi họ nói chuyện chủ yếu về webrat ...:

Nếu Bất cứ ai cũng có một ý tưởng về việc phải làm gì, phiên bản đá quý nào để sử dụng?

Trả lời

5

Bạn có thể thêm ...

config.include Rack::Test::Methods 

để spec_helper.rb của bạn. Thao tác này sẽ thêm last_response ... và các phương thức khác ... vào tất cả các thử nghiệm của bạn.

Vì bạn có thể không cần thực hiện điều đó, nên có ý tưởng tốt hơn là đưa chúng vào khi cần từ mô-đun. Tạo một mô-đun trợ giúp trong thư mục spec/support của bạn. Sau đó thêm mã này:

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

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

Bây giờ :type => :api bạn có thực sự sẽ làm điều gì đó, cụ thể là thêm Rack :: Test :: Phương pháp các thông số đó.

describe Api::Plist::ProvidersController, :type => :api do 
    # etc 
end 
0

Đó là một sự hiểu lầm của Rspec. "last_response" không tồn tại. Nó sẽ được cung cấp thông qua một mô-đun hỗ trợ hoặc bất cứ điều gì.

0

last_response là giá/kiểm tra. NẾU bạn không sử dụng nó, nó cần phải được loại bỏ.

Các vấn đề liên quan