mirror of
https://github.com/denoland/deno.git
synced 2024-12-24 08:09:08 -05:00
feat(test): Add "name", "origin" and "parent" to "Deno.TestContext" (#14007)
This commit adds following fields to "Deno.TestContext" interface: - name - origin - parent These are prerequisites for supporting snapshot functionality in "std/testing".
This commit is contained in:
parent
e33329b47e
commit
0df1854249
3 changed files with 70 additions and 2 deletions
19
cli/dts/lib.deno.ns.d.ts
vendored
19
cli/dts/lib.deno.ns.d.ts
vendored
|
@ -250,6 +250,19 @@ declare namespace Deno {
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface TestContext {
|
export interface TestContext {
|
||||||
|
/**
|
||||||
|
* The current test name.
|
||||||
|
*/
|
||||||
|
name: string;
|
||||||
|
/**
|
||||||
|
* File Uri of the current test code.
|
||||||
|
*/
|
||||||
|
origin: string;
|
||||||
|
/**
|
||||||
|
* Parent test context.
|
||||||
|
*/
|
||||||
|
parent?: TestContext;
|
||||||
|
|
||||||
/** Run a sub step of the parent test or step. Returns a promise
|
/** Run a sub step of the parent test or step. Returns a promise
|
||||||
* that resolves to a boolean signifying if the step completed successfully.
|
* that resolves to a boolean signifying if the step completed successfully.
|
||||||
* The returned promise never rejects unless the arguments are invalid.
|
* The returned promise never rejects unless the arguments are invalid.
|
||||||
|
@ -270,6 +283,9 @@ declare namespace Deno {
|
||||||
|
|
||||||
export interface TestStepDefinition {
|
export interface TestStepDefinition {
|
||||||
fn: (t: TestContext) => void | Promise<void>;
|
fn: (t: TestContext) => void | Promise<void>;
|
||||||
|
/**
|
||||||
|
* The current test name.
|
||||||
|
*/
|
||||||
name: string;
|
name: string;
|
||||||
ignore?: boolean;
|
ignore?: boolean;
|
||||||
/** Check that the number of async completed ops after the test step is the same
|
/** Check that the number of async completed ops after the test step is the same
|
||||||
|
@ -287,6 +303,9 @@ declare namespace Deno {
|
||||||
|
|
||||||
export interface TestDefinition {
|
export interface TestDefinition {
|
||||||
fn: (t: TestContext) => void | Promise<void>;
|
fn: (t: TestContext) => void | Promise<void>;
|
||||||
|
/**
|
||||||
|
* The current test name.
|
||||||
|
*/
|
||||||
name: string;
|
name: string;
|
||||||
ignore?: boolean;
|
ignore?: boolean;
|
||||||
/** If at least one test has `only` set to true, only run tests that have
|
/** If at least one test has `only` set to true, only run tests that have
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
|
// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
|
||||||
import { assertRejects, assertThrows } from "./test_util.ts";
|
import { assertEquals, assertRejects, assertThrows } from "./test_util.ts";
|
||||||
|
|
||||||
Deno.test(function testWrongOverloads() {
|
Deno.test(function testWrongOverloads() {
|
||||||
assertThrows(
|
assertThrows(
|
||||||
|
@ -117,3 +117,33 @@ Deno.test(async function invalidStepArguments(t) {
|
||||||
"Expected a test definition or name and function.",
|
"Expected a test definition or name and function.",
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Deno.test(async function nameOnTextContext(t1) {
|
||||||
|
await assertEquals(t1.name, "nameOnTextContext");
|
||||||
|
await t1.step("step", async (t2) => {
|
||||||
|
await assertEquals(t2.name, "step");
|
||||||
|
await t2.step("nested step", async (t3) => {
|
||||||
|
await assertEquals(t3.name, "nested step");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
Deno.test(async function originOnTextContext(t1) {
|
||||||
|
await assertEquals(t1.origin, Deno.mainModule);
|
||||||
|
await t1.step("step", async (t2) => {
|
||||||
|
await assertEquals(t2.origin, Deno.mainModule);
|
||||||
|
await t2.step("nested step", async (t3) => {
|
||||||
|
await assertEquals(t3.origin, Deno.mainModule);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
Deno.test(async function parentOnTextContext(t1) {
|
||||||
|
await assertEquals(t1.parent, undefined);
|
||||||
|
await t1.step("step", async (t2) => {
|
||||||
|
await assertEquals(t1, t2.parent);
|
||||||
|
await t2.step("nested step", async (t3) => {
|
||||||
|
await assertEquals(t2, t3.parent);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
|
@ -792,6 +792,7 @@
|
||||||
const step = new TestStep({
|
const step = new TestStep({
|
||||||
name: test.name,
|
name: test.name,
|
||||||
parent: undefined,
|
parent: undefined,
|
||||||
|
parentContext: undefined,
|
||||||
rootTestDescription: description,
|
rootTestDescription: description,
|
||||||
sanitizeOps: test.sanitizeOps,
|
sanitizeOps: test.sanitizeOps,
|
||||||
sanitizeResources: test.sanitizeResources,
|
sanitizeResources: test.sanitizeResources,
|
||||||
|
@ -1064,8 +1065,9 @@
|
||||||
* }} TestStepDefinition
|
* }} TestStepDefinition
|
||||||
*
|
*
|
||||||
* @typedef {{
|
* @typedef {{
|
||||||
* name: string;
|
* name: string,
|
||||||
* parent: TestStep | undefined,
|
* parent: TestStep | undefined,
|
||||||
|
* parentContext: TestContext | undefined,
|
||||||
* rootTestDescription: { origin: string; name: string };
|
* rootTestDescription: { origin: string; name: string };
|
||||||
* sanitizeOps: boolean,
|
* sanitizeOps: boolean,
|
||||||
* sanitizeResources: boolean,
|
* sanitizeResources: boolean,
|
||||||
|
@ -1099,6 +1101,10 @@
|
||||||
return this.#params.parent;
|
return this.#params.parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get parentContext() {
|
||||||
|
return this.#params.parentContext;
|
||||||
|
}
|
||||||
|
|
||||||
get rootTestDescription() {
|
get rootTestDescription() {
|
||||||
return this.#params.rootTestDescription;
|
return this.#params.rootTestDescription;
|
||||||
}
|
}
|
||||||
|
@ -1268,6 +1274,18 @@
|
||||||
function createTestContext(parentStep) {
|
function createTestContext(parentStep) {
|
||||||
return {
|
return {
|
||||||
[SymbolToStringTag]: "TestContext",
|
[SymbolToStringTag]: "TestContext",
|
||||||
|
/**
|
||||||
|
* The current test name.
|
||||||
|
*/
|
||||||
|
name: parentStep.name,
|
||||||
|
/**
|
||||||
|
* Parent test context.
|
||||||
|
*/
|
||||||
|
parent: parentStep.parentContext ?? undefined,
|
||||||
|
/**
|
||||||
|
* File Uri of the test code.
|
||||||
|
*/
|
||||||
|
origin: parentStep.rootTestDescription.origin,
|
||||||
/**
|
/**
|
||||||
* @param nameOrTestDefinition {string | TestStepDefinition}
|
* @param nameOrTestDefinition {string | TestStepDefinition}
|
||||||
* @param fn {(t: TestContext) => void | Promise<void>}
|
* @param fn {(t: TestContext) => void | Promise<void>}
|
||||||
|
@ -1284,6 +1302,7 @@
|
||||||
const subStep = new TestStep({
|
const subStep = new TestStep({
|
||||||
name: definition.name,
|
name: definition.name,
|
||||||
parent: parentStep,
|
parent: parentStep,
|
||||||
|
parentContext: this,
|
||||||
rootTestDescription: parentStep.rootTestDescription,
|
rootTestDescription: parentStep.rootTestDescription,
|
||||||
sanitizeOps: getOrDefault(
|
sanitizeOps: getOrDefault(
|
||||||
definition.sanitizeOps,
|
definition.sanitizeOps,
|
||||||
|
|
Loading…
Reference in a new issue