测试葡萄 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。
我正在尝试测试我的 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。