我已经设置了一个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
答案 0 :(得分:0)
可能的解决方案:
module Support
module SharedControllerTest
def self.included(base)
base.const_set "IndexTest", Class.new(base) {
test 'it works' do
assert_nil nil
end
}
end
end
end
module Api::V1
module Foos
class FoosControllerTest < ActionController::TestCase
include Support::SharedControllerTest
end
end
end
让我知道您是否需要帮助或有任何疑问。