是否可以检查模块是否已包含在 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, {}]]