mirror of
https://github.com/denoland/deno.git
synced 2025-09-23 02:42:34 +00:00
feat(test): create coverage reports when --coverage specified in deno test (#28260)
This PR updates the behavior of `deno test --coverage` option. Now if `--coverage` option is specified, `deno test` command automatically shows summary report in the terminal, and generates the lcov report in `$coverage_dir/lcov.info` and html report in `$coverage_dir/html/` This change also adds `--coverage-raw-data-only` flag, which prevents the above reports generated, instead only generates the raw json coverage data (which is the same as current behavior)
This commit is contained in:
parent
0bb16651c0
commit
83f15ece09
20 changed files with 203 additions and 36 deletions
|
@ -27,6 +27,7 @@ use deno_error::JsErrorBox;
|
|||
use deno_resolver::npm::DenoInNpmPackageChecker;
|
||||
use node_resolver::InNpmPackageChecker;
|
||||
use regex::Regex;
|
||||
use reporter::CoverageReporter;
|
||||
use text_lines::TextLines;
|
||||
use uuid::Uuid;
|
||||
|
||||
|
@ -35,7 +36,6 @@ use self::ignore_directives::lex_comments;
|
|||
use self::ignore_directives::parse_next_ignore_directives;
|
||||
use self::ignore_directives::parse_range_ignore_directives;
|
||||
use crate::args::CliOptions;
|
||||
use crate::args::CoverageFlags;
|
||||
use crate::args::FileFlags;
|
||||
use crate::args::Flags;
|
||||
use crate::cdp;
|
||||
|
@ -49,7 +49,7 @@ use crate::util::text_encoding::source_map_from_code;
|
|||
mod ignore_directives;
|
||||
mod merge;
|
||||
mod range_tree;
|
||||
mod reporter;
|
||||
pub mod reporter;
|
||||
mod util;
|
||||
use merge::ProcessCoverage;
|
||||
|
||||
|
@ -596,9 +596,14 @@ fn filter_coverages(
|
|||
|
||||
pub fn cover_files(
|
||||
flags: Arc<Flags>,
|
||||
coverage_flags: CoverageFlags,
|
||||
files_include: Vec<String>,
|
||||
files_ignore: Vec<String>,
|
||||
include: Vec<String>,
|
||||
exclude: Vec<String>,
|
||||
output: Option<String>,
|
||||
reporters: &[&dyn CoverageReporter],
|
||||
) -> Result<(), AnyError> {
|
||||
if coverage_flags.files.include.is_empty() {
|
||||
if files_include.is_empty() {
|
||||
return Err(anyhow!("No matching coverage profiles found"));
|
||||
}
|
||||
|
||||
|
@ -609,26 +614,21 @@ pub fn cover_files(
|
|||
let emitter = factory.emitter()?;
|
||||
let cjs_tracker = factory.cjs_tracker()?;
|
||||
|
||||
assert!(!coverage_flags.files.include.is_empty());
|
||||
|
||||
// Use the first include path as the default output path.
|
||||
let coverage_root = cli_options
|
||||
.initial_cwd()
|
||||
.join(&coverage_flags.files.include[0]);
|
||||
let coverage_root = cli_options.initial_cwd().join(&files_include[0]);
|
||||
let script_coverages = collect_coverages(
|
||||
cli_options,
|
||||
coverage_flags.files,
|
||||
FileFlags {
|
||||
include: files_include,
|
||||
ignore: files_ignore,
|
||||
},
|
||||
cli_options.initial_cwd(),
|
||||
)?;
|
||||
if script_coverages.is_empty() {
|
||||
return Err(anyhow!("No coverage files found"));
|
||||
}
|
||||
let script_coverages = filter_coverages(
|
||||
script_coverages,
|
||||
coverage_flags.include,
|
||||
coverage_flags.exclude,
|
||||
in_npm_pkg_checker,
|
||||
);
|
||||
let script_coverages =
|
||||
filter_coverages(script_coverages, include, exclude, in_npm_pkg_checker);
|
||||
if script_coverages.is_empty() {
|
||||
return Err(anyhow!("No covered files included in the report"));
|
||||
}
|
||||
|
@ -645,9 +645,7 @@ pub fn cover_files(
|
|||
vec![]
|
||||
};
|
||||
|
||||
let mut reporter = reporter::create(coverage_flags.r#type);
|
||||
|
||||
let out_mode = match coverage_flags.output {
|
||||
let out_mode = match output {
|
||||
Some(ref path) => match File::create(path) {
|
||||
Ok(_) => Some(PathBuf::from(path)),
|
||||
Err(e) => {
|
||||
|
@ -742,7 +740,9 @@ pub fn cover_files(
|
|||
}
|
||||
}
|
||||
|
||||
reporter.done(&coverage_root, &file_reports);
|
||||
for reporter in reporters {
|
||||
reporter.done(&coverage_root, &file_reports);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue