R: testthat reporter that checks if child processes are cleaned...

CleanupReporter {ps} | R Documentation

## testthat reporter that checks if child processes are cleaned up in tests

### Description

`CleanupReporter` takes an existing testthat `Reporter` object, and wraps it, so it checks for leftover child processes, at the specified place, see the `proc_unit` argument below.

### Usage

    CleanupReporter(reporter = testthat::ProgressReporter)

### Arguments

`reporter` | A testthat reporter to wrap into a new `CleanupReporter` class.

### Details

Child processes can be reported via a failed expectation, cleaned up silently, or cleaned up and reported (the default).

The constructor of the `CleanupReporter` class has options:

- `file`: the output file, if any, this is passed to `reporter`.

- `proc_unit`: when to perform the child process check and cleanup. Possible values:

  - `"test"`: at the end of each `testthat::test_that()` block (the default),

  - `"testsuite"`: at the end of the test suite.

- `proc_cleanup`: Logical scalar, whether to kill the leftover processes, `TRUE` by default.

- `proc_fail`: Whether to create an expectation, that fails if there are any processes alive, `TRUE` by default.

- `proc_timeout`: How long to wait for the processes to quit. This is sometimes needed, because even if some kill signals were sent to child processes, it might take a short time for these to take effect. It defaults to one second.

- `rconn_unit`: When to perform the R connection cleanup. Possible values are `"test"` and `"testsuite"`, like for `proc_unit`.

- `rconn_cleanup`: Logical scalar, whether to clean up leftover R connections. `TRUE` by default.

- `rconn_fail`: Whether to fail for leftover R connections. `TRUE` by default.

- `file_unit`: When to check for open files. Possible values are `"test"` and `"testsuite"`, like for `proc_unit`.

- `file_fail`: Whether to fail for leftover open files. `TRUE` by default.

- `conn_unit`: When to check for open network connections. Possible values are `"test"` and `"testsuite"`, like for `proc_unit`.

- `conn_fail`: Whether to fail for leftover network connections. `TRUE` by default.

### Value

New reporter class that behaves exactly like `reporter`, but it checks for, and optionally cleans up child processes, at the specified granularity.

### Examples

This is how to use this reporter in `testthat.R`:

    library(testthat)
    library(mypackage)

    if  (ps::ps_is_supported()) {
      reporter <- ps::CleanupReporter(testthat::ProgressReporter)$new(
        proc_unit = "test", proc_cleanup = TRUE)
    } else {
      ## ps does not support this platform
      reporter <- "progress"
    }

    test_check("mypackage", reporter = reporter)

### Note

Some IDEs, like RStudio, start child processes frequently, and sometimes crash when these are killed, only use this reporter in a terminal session. In particular, you can always use it in the idiomatic `testthat.R` file, that calls `test_check()` during `R CMD check`.

[Package ps version 1.7.0 Index]