ruby-on-rails 我如何获得代码覆盖率报告只为指定的测试在simplecov?

7z5jn7bk  于 2023-07-01  发布在  Ruby
关注(0)|答案(1)|浏览(155)

我将我的Rails6应用程序命名为三个部分,我希望只对特定的命名空间运行代码覆盖率,如

$ rails test test/controllers/office
$ rails test test/controllers/member
$ rails test test/controllers/provider

SimpleCov目前显示了整个项目的覆盖范围。我只想看到指定测试的覆盖率报告。
我没有找到任何(直接)文件。最接近的是simplecov的侧写

  • 需要配置文件名称(硬编码或环境变量)
  • 只接受一个配置文件
  • 需要配置的配置文件
  • 与规定试验无关

我怎样才能只为指定的测试获得代码覆盖率报告?

  • 有没有什么现成的方法可以使用simplecov?
  • 除了simplecov之外,还有其他选择来实现我想要的吗?

更新:
SimpleCov有这些直接相关但尚未解决的问题

更新2:
Simplecov目前

  • 使用接受文件模式的track_file方法(对于rails配置文件设置为{app,lib}/**/*.rb
  • 使用文件模式计算coverage
uxh89sit

uxh89sit1#

截至我在2021年9月的知识截止日期,SimpleCov没有内置功能来仅为Rails应用程序中的特定测试或名称空间生成代码覆盖率报告。但是,您可以通过使用SimpleCov的配置选项来实现此功能。
一种方法是在运行特定名称空间的测试之前动态修改SimpleCov的配置。下面是一个如何实现此目的的示例:
在Rails应用程序的config/initializers目录中创建一个新的初始化器文件(例如,simplecov.rb)。
在这个初始化器文件中,您可以定义SimpleCov的配置。下面是一个基本的例子:

# config/initializers/simplecov.rb
require 'simplecov'

# Set the coverage report location (optional)
SimpleCov.coverage_dir 'coverage'

# Start SimpleCov
SimpleCov.start

接下来,您需要在运行特定名称空间的测试之前修改配置。您可以通过使用基于命令行参数或环境变量的条件语句来实现这一点。

# config/initializers/simplecov.rb
require 'simplecov'

# Set the coverage report location (optional)
SimpleCov.coverage_dir 'coverage'

# Check if the test command matches the desired namespace
if ARGV.any? { |arg| arg.include?('test/controllers/office') }
  # Modify SimpleCov's configuration for the 'office' namespace
  SimpleCov.add_filter do |source_file|
    # Specify the filter condition for the 'office' namespace files
    source_file.filename.include?('/controllers/office') ||
      source_file.filename.include?('/models/office')
  end
elsif ARGV.any? { |arg| arg.include?('test/controllers/member') }
  # Modify SimpleCov's configuration for the 'member' namespace
  SimpleCov.add_filter do |source_file|
    # Specify the filter condition for the 'member' namespace files
    source_file.filename.include?('/controllers/member') ||
      source_file.filename.include?('/models/member')
  end
elsif ARGV.any? { |arg| arg.include?('test/controllers/provider') }
  # Modify SimpleCov's configuration for the 'provider' namespace
  SimpleCov.add_filter do |source_file|
    # Specify the filter condition for the 'provider' namespace files
    source_file.filename.include?('/controllers/provider') ||
      source_file.filename.include?('/models/provider')
  end
end

# Start SimpleCov
SimpleCov.start

在此示例中,SimpleCov.add_filter方法用于根据要包含在代码覆盖率报告中的名称空间来定义文件筛选器。您可以调整SimpleCov.add_filter块中的条件,以匹配您希望为每个名称空间包含的特定文件。
通过动态修改SimpleCov配置,您可以通过运行相应的测试命令为不同的命名空间生成单独的覆盖率报告:

$ rails test test/controllers/office
$ rails test test/controllers/member
$ rails test test/controllers/provider

这些命令中的每一个都将对指定的命名空间执行测试,并生成一个仅针对相关文件过滤的代码覆盖率报告。
请记住,此解决方案基于SimpleCov中可用的功能,直到我在2021年9月的知识截止日期。从那时起可能会有更新或新的替代品可用。参考SimpleCov文档或GitHub存储库以获取最新信息和功能总是一个好主意。

相关问题