【问题标题】:Rails test fails to runRails 测试无法运行
【发布时间】: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


【解决方案1】:

如下重构解决了这个问题,虽然我不知道为什么(欢迎提出建议):

namespace :stats do

  desc 'Generate all the stats'
  task :generate => [:environment] do
    require File.join(Rails.root, 'lib', 'modules', 'stats.rb')
    include Stats
    stats = StatsMethods.generate_all_the_stats
    puts stats
  end

end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 2019-03-13
    • 2011-11-12
    • 2020-10-31
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多