
Issue #19857 has been updated by ioquatix (Samuel Williams). Bake uses `module_eval` to load source files: https://github.com/ioquatix/bake/blob/c6b0d313a216077ceff460e2e90324206f3c24... If you load the same file several times during testing, coverage of previous tests is lost/cleared. Any code which uses a variant of this - e.g. `rack` https://github.com/rack/rack/blob/64610db2d2e7e910c4d3e17874dc316ed3eb227a/l... can suffer the same problem. It's common to load `config.ru` fresh each time you run a test, for example. ---------------------------------------- Bug #19857: Eval coverage is reset after each `eval`. https://bugs.ruby-lang.org/issues/19857#change-104476 * Author: ioquatix (Samuel Williams) * Status: Open * Priority: Normal * Assignee: ioquatix (Samuel Williams) * Backport: 3.0: DONTNEED, 3.1: DONTNEED, 3.2: REQUIRED ---------------------------------------- It seems like `eval` based coverage is reset every time eval is invoked. ```ruby #!/usr/bin/env ruby require 'coverage' def measure(flag) c = Class.new c.class_eval(<<~RUBY, "foo.rb", 1) def foo(flag) if flag puts "foo" else puts "bar" end end RUBY return c.new.foo(flag) end Coverage.start(lines: true, eval: true) # Depending on the order of these two operations, different coverage is calculated, because the evaluation of the code is considered different, even if the content/path is the same. measure(false) measure(true) p Coverage.result ``` Further investigation is required. -- https://bugs.ruby-lang.org/