【发布时间】:2021-04-16 12:37:53
【问题描述】:
我在 Rails 6.1.3.1 中的测试中遇到了一个奇怪的问题。我创建了一个文件,用于生成有关我的数据的各种统计信息,该文件位于lib/modules/stats.rb。我在test/modules/stats_test.rb 中添加了一个运行此测试的测试文件,并且我有 100% 的覆盖率。
这些统计数据可以在不同的地方使用,其中之一将用于 Rake 任务。所以,我按照这些思路创建了lib/tasks/stats.rake:
require "#{Rails.root}/lib/modules/stats.rb"
include Stats
namespace :stats do
desc 'Print all the stats'
task :print => [:environment] do
stats = StatsMethods.generate_all_the_stats
puts stats
end
end
由于该文件的第一行存在,rake test 不再运行test/modules/stats_test.rb;覆盖率成比例下降。这是怎么回事?
【问题讨论】:
-
rake test的输出是什么?单独运行该测试文件时的输出是什么? -
测试输出与预期一致,没有任何警告,无论我是一起运行还是单独运行;唯一的区别是全部运行时覆盖率下降。
-
你的覆盖工具是什么?有了许多,您可以生成一份报告,告诉您其计算方式。它认为现在未经测试的是什么,你同意吗?
-
根据 Gemfile,它是 simplecov、simplecov-lcov 和 rails-controller-testing。重构后(请参阅下面的答案),所有内容都已涵盖。
-
如果更改此文件会更改测试覆盖率,那么应该覆盖它的测试看起来像什么?
标签: ruby-on-rails unit-testing minitest ruby-on-rails-6.1