У меня настроен тест контроллера minitest следующим образом:
module Api::V1
module Foos
class FoosControllerTest < ActionController::TestCase
class IndexTest < self
class NotLoggedInTest < self
test 'it denies access' do
perform_request
assert_response :unauthorized
end
end
class AdminLoggedInTest < self
def perform_request
sign_in admin_user
super
end
test 'it allows admins access' do
perform_request
assert_response :success
end
end
def perform_request
get :index, format: :json
end
end
end
end
end
Он использует вложенные классы (например, IndexTest
) для разделения различных контекстов теста, в то же время позволяя использовать некоторые функции.
Теперь мне нужен этот точный тест для другого контроллера, поэтому я пытаюсь создать модуль, который при включении будет динамически определять различные тестовые классы и позволять им наследовать от включающего класса.
Например (это не работает):
module Support
module SharedControllerTest
extend ActiveSupport::Concern
included do |base|
base.const_set 'IndexTest', Class.new(base) do
# For example
test 'it works' do
assert_nil nil
end
end
end
end
end
Это не с NoMethodError: undefined method 'setup' for #<Class:0x00000004821fc8>
.
Как мне создать модуль, который при включении может динамически определять мои разные тестовые классы и устанавливать их для наследования от включающего класса?
Редактировать 1:
Я пытаюсь включить этот модуль в контроллер следующим образом:
module Api::V1
module Foos
class FoosControllerTest < ActionController::TestCase
include Support::SharedControllerTest
end
end
end