Allows you to test your sync or async function in an isolated environment. It's useful, because you can mock function dependencies. Isolation consists of:
- preparing from options and restoring process
env
,exitCode
, working dir after run. - intercepting and parsing writes to
stdenv
andstdout
. - preparing temp dirs, files, env variables for GitHub runner environment emulation.
import {RunTarget, RunOptions} from 'github-action-ts-run-api';
// No action config was specified.
// * Default input values will not be applied
const target1 = RunTarget.syncFn(myFunc);
// Read action config from action.yml file.
// * Default input values will be used from the inputs section.
const target2 = RunTarget.syncFn(myFunc, 'path/to/action.yml');
// Pass already parsed action config.
// * Default input values will be used from the inputs section.
const target3 = RunTarget.syncFn(myFunc, parsedYmlObject);
// Returned result is a `FnRunResult` instance.
const result = target1.run(RunOptions.create());
Use async target if your function returns a Promise. Target run will wait until it fulfills to return.
import {RunTarget, RunOptions} from 'github-action-ts-run-api';
// No action config was specified.
// * Default input values will not be applied
const target1 = RunTarget.asyncFn(myFunc);
// Read action config from action.yml file.
// * Default input values will be used from the inputs section.
const target2 = RunTarget.asyncFn(myFunc, 'path/to/action.yml');
// Pass already parsed action config.
// * Default input values will be used from the inputs section.
const target3 = RunTarget.asyncFn(myFunc, parsedYmlObject);
// Returned result is a `Promise<FnRunResult>` instance.
const result = await target1.run(RunOptions.create());
Contains a value returned by a tested function. In case of async function it is a value awaited from a Promise returned by a tested function.
Contains an error thrown by a function. For async function it's a Promise reject reason.
Contains run duration in milliseconds. For async function it is a time from function call to the moment when Promise was fulfilled.
Is set to true
if run duration took more time than specified options.timeoutMs
.
Usage examples can be found in FnTarget.test.ts.
🔻 process.exit(...)
calls inside a function are not mocked and will lead to process termination without
cleaning up test environment. Try to avoid them.
🔻 Specified timeoutMs
in options doesn't limit an execution time, just sets result.isTimedOut
property if execution time was exceeded the timeout.
🔻 Keep in mind, require("@actions/github").context
is cached inside actions library which can cause troubles if you run
multiple test cases. To get it around you can:
- Use
new (require("@actions/github/lib/context").Context)()
instead. - Call
jest.resetModules()
after each test case run.