是否可以检查模块是否已包含在 RSpec 配置中?
Is it possible to check if a module is already included in RSpec configuration?
在 gem 中,我定义了一个需要包含在 RSpec 配置中的规范辅助模块。
最初,我们决定让用户需要模块文件并将其显式包含在 RSpec.configure
块中。
现在我们要改变这个行为并自动包含我们的模块:
# spec/support/my_mod.rb
module MyMod
# ...
end
RSpec.configure do |config|
config.include MyMod
end
有没有办法检查我们的模块是否已经包含在 RSpec 的配置中?
检查 Configuration docs,我没有看到可以帮助这里的方法。
更新:我刚刚意识到这是一种不常见的情况,因为检查模块是否已经包含在模块文件本身中是没有用的——手动包含在应用稍后发生:(
解决方法。 @include_modules
包含 RSpec::Core::FilterableItemRepository::QueryOptimized
的实例,该实例具有 items_and_filters
方法。
RSpec.configure do |config|
included_modules = RSpec.configuration.instance_variable_get(:@include_modules).items_and_filters.map(&:first)
unless included_modules.include?(MyMod)
config.include MyMod
end
end
> RSpec.configuration.instance_variable_get(:@include_modules).items_and_filters
=> [[MyMod, {}]]
在 gem 中,我定义了一个需要包含在 RSpec 配置中的规范辅助模块。
最初,我们决定让用户需要模块文件并将其显式包含在 RSpec.configure
块中。
现在我们要改变这个行为并自动包含我们的模块:
# spec/support/my_mod.rb
module MyMod
# ...
end
RSpec.configure do |config|
config.include MyMod
end
有没有办法检查我们的模块是否已经包含在 RSpec 的配置中? 检查 Configuration docs,我没有看到可以帮助这里的方法。
更新:我刚刚意识到这是一种不常见的情况,因为检查模块是否已经包含在模块文件本身中是没有用的——手动包含在应用稍后发生:(
解决方法。 @include_modules
包含 RSpec::Core::FilterableItemRepository::QueryOptimized
的实例,该实例具有 items_and_filters
方法。
RSpec.configure do |config|
included_modules = RSpec.configuration.instance_variable_get(:@include_modules).items_and_filters.map(&:first)
unless included_modules.include?(MyMod)
config.include MyMod
end
end
> RSpec.configuration.instance_variable_get(:@include_modules).items_and_filters
=> [[MyMod, {}]]