Issue 1:
When you execute a subprocess there's no guarantees of what it can do - all security bets are off. --allow-run masks this and is an extra command line flag. Therefore I suggest removing it entirely and requiring users to supply --allow-all.

Issue 2:
Both of the tests below have the same async function. They should both fail for leaking async ops. The first creates 2 timeouts, but the failure shows there is only 1 more dispatched than completed async ops. When the next test starts, it starts with there being one more dispatched op than completed ops. The setTimeout calls in the second test do not result in any change to the number of dispatched and completed async ops. Because of that, the second test does not fail.

import { delay } from "https://deno.land/std@0.80.0/async/delay.ts";

Deno.test("example 1", async () => {
let metrics = Deno.metrics();
console.log(
`
Before:
- dispatched: ${metrics.opsDispatchedAsync}
- completed: ${metrics.opsCompletedAsync}`,
);

setTimeout(() => {}, 10000);
setTimeout(() => {}, 10001);

metrics = Deno.metrics();
console.log(
`After:
- dispatched: ${metrics.opsDispatchedAsync}
- completed: ${metrics.opsCompletedAsync}`,
);
await delay(0);
});

Deno.test("example 2", async () => {
let metrics = Deno.metrics();
console.log(
`
Before:
- dispatched: ${metrics.opsDispatchedAsync}
- completed: ${metrics.opsCompletedAsync}`,
);

setTimeout(() => {}, 10000);
setTimeout(() => {}, 10001);

metrics = Deno.metrics();
console.log(
`After:
- dispatched: ${metrics.opsDispatchedAsync}
- completed: ${metrics.opsCompletedAsync}`,
);
await delay(0);
});

deno --version
deno 1.6.0 (release, x86_64-unknown-linux-gnu)
v8 8.8.278.2
typescript 4.1.2
deno test example_test.ts
Check file:///mnt/c/Users/kylej/projects/deno/test_suite/$deno$test.ts
running 2 tests
test example 1 ...
Before:
- dispatched: 0
- completed: 0
After:
- dispatched: 1
- completed: 0
FAILED (5ms)
test example 2 ...
Before:
- dispatched: 5
- completed: 4
After:
- dispatched: 5
- completed: 4
ok (3ms)

failures:

example 1
AssertionError: Test case is leaking async ops.
Before:
- dispatched: 0
- completed: 0
After:
- dispatched: 5
- completed: 4

Make sure to await all promises returned from Deno APIs before
finishing test case.
at assert (deno:cli/rt/06_util.js:33:13)
at asyncOpSanitizer (deno:cli/rt/40_testing.js:46:7)
at async Object.resourceSanitizer [as fn] (deno:cli/rt/40_testing.js:70:7)
at async TestRunner.[Symbol.asyncIterator] (deno:cli/rt/40_testing.js:245:13)
at async Object.runTests (deno:cli/rt/40_testing.js:322:22)
at async $deno$test.ts:3:1

failures:

example 1

test result: FAILED. 1 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out (9ms)

The same issue applies if I make the test function syncronous by removing async key word and the await delay(0) from the end.

Deno.test("example 1", () => {
let metrics = Deno.metrics();
console.log(
`
Before:
- dispatched: ${metrics.opsDispatchedAsync}
- completed: ${metrics.opsCompletedAsync}`,
);

setTimeout(() => {}, 10000);
setTimeout(() => {}, 10001);

metrics = Deno.metrics();
console.log(
`After:
- dispatched: ${metrics.opsDispatchedAsync}
- completed: ${metrics.opsCompletedAsync}`,
);
});

Deno.test("example 2", () => {
let metrics = Deno.metrics();
console.log(
`
Before:
- dispatched: ${metrics.opsDispatchedAsync}
- completed: ${metrics.opsCompletedAsync}`,
);

setTimeout(() => {}, 10000);
setTimeout(() => {}, 10001);

metrics = Deno.metrics();
console.log(
`After:
- dispatched: ${metrics.opsDispatchedAsync}
- completed: ${metrics.opsCompletedAsync}`,
);
});

deno test example_test.ts
Check file:///mnt/c/Users/kylej/projects/deno/test_suite/$deno$test.ts
running 2 tests
test example 1 ...
Before:
- dispatched: 0
- completed: 0
After:
- dispatched: 1
- completed: 0
FAILED (3ms)
test example 2 ...
Before:
- dispatched: 3
- completed: 2
After:
- dispatched: 3
- completed: 2
ok (2ms)

failures:

example 1
AssertionError: Test case is leaking async ops.
Before:
- dispatched: 0
- completed: 0
After:
- dispatched: 3
- completed: 2

Make sure to await all promises returned from Deno APIs before
finishing test case.
at assert (deno:cli/rt/06_util.js:33:13)
at asyncOpSanitizer (deno:cli/rt/40_testing.js:46:7)
at async Object.resourceSanitizer [as fn] (deno:cli/rt/40_testing.js:70:7)
at async TestRunner.[Symbol.asyncIterator] (deno:cli/rt/40_testing.js:245:13)
at async Object.runTests (deno:cli/rt/40_testing.js:322:22)
at async $deno$test.ts:3:1

failures:

example 1

test result: FAILED. 1 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out (5ms)