2016-04-07 26 views
0

grape api'yi test etmeye çalışıyorum ve testlerimde sorun yaşıyorum.Test etme Üzüm api. ActionController :: TestCase @controller nil

Raylar varsayılan testini kullanıyorum, bu benim Gemfile test bölümüm.

group :development, :test do 
    gem 'sqlite3' 
    gem 'byebug' # Call 'byebug' anywhere in the code to stop execution and get a debugger console 
    gem 'spring' # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring 
    gem 'factory_girl_rails' 
    gem 'capybara' 
    gem 'selenium-webdriver' 
    gem 'capybara-angular' 
    gem 'poltergeist' 
    gem 'phantomjs', :require => 'phantomjs/poltergeist', platforms: :ruby # linux 
end 

Benim denetleyicisi:

# app/controllers/api/v1/vehicules.rb 
module API 
    module V1 
    class Vehicules < Grape::API 

ve benim test:

1) Error: 
API::V1::VehiculesTest#test_GET_/api/v1/vehicules?user_id=123: 
RuntimeError: @controller is nil: make sure you set it in your test's setup meth 
od. 
    test/controllers/api/v1/vehicules_test.rb:7:in `block in <class:VehiculesTes 
t>' 

yapamadım: Testi başlattığınızda, bu hata var

# test/controllers/api/v1/vehicules_test.rb 
require "test_helper" 

class API::V1::VehiculesTest < ActionController::TestCase 
    @controller = API::V1::VehiculesTest.new 

    test "GET /api/v1/vehicules?user_id=123" do 
    get("/api/v1/vehicules?user_id=123") 
    assert_response :success 
    json_response = JSON.parse(response.body) 
    assert_not(json_response['principal'], "principal devrait être faux") 
    end 

    test "PUT /api/v1/vehicules?user_id=123" do 
    put("/api/v1/vehicules?user_id=123", { 'princiapl' => true }, :format => "json") 
    assert_response :success 
    json_response = JSON.parse(response.body) 
    assert_not(json_response['principal'], "principal devrait être vrais") 
    end 

end 

controller neden bulunamıyor. test_helper.rb'uma bir şey eklemek zorunda mıyım?

class ActionController::TestCase 

end 

cevap

2

Normal bir Raylar denetleyicisi testi ama Üzüm sınıf için onun biraz farklı olarak testinizi kuruyoruz: Bu ActionController için bir şey içermiyor. ActionController::TestCase'dan devralmak yerine, ActiveSupport::TestCase'dan miras almalısınız, sonra Raf sınama yardımcılarını da dahil etmelisiniz.

örn.

class API::V1::VehiclesTest < ActiveSupport::TestCase 
    include Rack::Test::Methods 

    def app 
    Rails.application 
    end 

    test "GET /api/v1/vehicules?user_id=123" do 
    get("/api/v1/vehicules?user_id=123") 

    assert last_response.ok? 

    assert_not(JSON.parse(last_response.body)['principal'], "principal devrait être faux") 
    end 

    # your tests 
end 

daha detaylı bilgi için https://github.com/ruby-grape/grape#minitest-1 ve https://github.com/brynary/rack-test bakınız.