All Deno runtime test files were moved to cli/js/tests/ directory. It makes a clear distinction that cli/js/tests/ contains code that is run under Deno runtime as opposed to code in cli/js/ which is used to create bundle and snapshot with "deno_typescript".
1.6 KiB
Deno runtime tests
Files in this directory are unit tests for Deno runtime.
They are run under compiled Deno binary as opposed to files in cli/js/
which
are bundled and snapshotted using deno_typescript
crate.
Testing Deno runtime code requires checking API under different runtime
permissions (ie. running with different --allow-*
flags). To accomplish this
all tests exercised are created using unitTest()
function.
import { unitTest } from "./test_util.ts";
unitTest(function simpleTestFn(): void {
// test code here
});
unitTest({
skip: Deno.build.os === "win",
perms: { read: true, write: true },
},
function complexTestFn(): void {
// test code here
}
);
unitTest
is is a wrapper function that enhances Deno.test()
API in several
ways:
- ability to conditionally skip tests using
UnitTestOptions.skip
- ability to register required set of permissions for given test case using
UnitTestOptions.perms
- sanitization of resources - ensuring that tests close all opened resources preventing interference between tests
- sanitization of async ops - ensuring that tests don't leak async ops by ensuring that all started async ops are done before test finishes
unit_test_runner.ts
is main script used to run unit tests.
Runner discoveres required permissions combinations by loading
cli/js/tests/unit_tests.ts
and going through all registered instances of
unitTest
. For each discovered permission combination a new Deno process is
created with respective --allow-*
flags which loads
cli/js/tests/unit_tests.ts
and executes all unitTest
that match runtime
permissions.