blob: 5809224f75f380fb987af3724fe8156d8ee5ef26 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
# 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.
|