测试葡萄 api。 ActionController::TestCase @controller 为零

Testing Grape api. ActionController::TestCase @controller is nil

我正在尝试测试我的 grape api,但我的测试遇到了问题。

我使用rails默认测试,这是我的Gemfile测试部分。

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

我的控制器:

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

和我的测试:

# 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

当我启动测试时,出现了这个错误:

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

我找不到 controller 的原因。我必须在我的 test_helper.rb 中添加一些东西吗?它不包含 ActionController :

class ActionController::TestCase

end

您正在将测试设置为正常的 Rails 控制器测试,但它对于 Grape class 略有不同。

与其继承自 ActionController::TestCase,不如继承自 ActiveSupport::TestCase,然后包含 Rack 测试助手。

例如

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

有关详细信息,请参阅 https://github.com/ruby-grape/grape#minitest-1 and https://github.com/brynary/rack-test