The assertions module provides 10 assertions:

    • assert(expr: unknown, msg = ""): asserts expr
    • assertEquals(actual: unknown, expected: unknown, msg?: string): void
    • assertExists(actual: unknown,msg?: string): void
    • assertNotEquals(actual: unknown, expected: unknown, msg?: string): void
    • assertStrictEquals(actual: unknown, expected: unknown, msg?: string): void
    • assertStringIncludes(actual: string, expected: string, msg?: string): void
    • assertArrayIncludes(actual: unknown[], expected: unknown[], msg?: string): void
    • assertMatch(actual: string, expected: RegExp, msg?: string): void
    • assertNotMatch(actual: string, expected: RegExp, msg?: string): void
    • assertObjectMatch( actual: Record<PropertyKey, unknown>, expected: Record<PropertyKey, unknown>): void
    • assertThrows(fn: () => void, ErrorClass?: Constructor, msgIncludes?: string | undefined, msg?: string | undefined): Error
    • assertRejects(fn: () => Promise<unknown>, ErrorClass?: Constructor, msgIncludes?: string | undefined, msg?: string | undefined): Promise<void>

    The assert method is a simple ‘truthy’ assertion and can be used to assert any value which can be inferred as true.

    1. Deno.test("Test Assert", () => {
    2. assert(1);
    3. assert("Hello");
    4. assert(true);
    5. });

    Exists

    The assertExists can be used to check if a value is not null or undefined.

    1. assertExists("Denosaurus");
    2. Deno.test("Test Assert Exists", () => {
    3. assertExists("Denosaurus");
    4. assertExists(false);
    5. assertExists(0);
    6. });

    Equality

    There are three equality assertions available, assertEquals(), assertNotEquals() and assertStrictEquals().

    The assertEquals() and assertNotEquals() methods provide a general equality check and are capable of asserting equality between primitive types and objects.

    1. Deno.test("Test Assert Equals", () => {
    2. assertEquals(1, 1);
    3. assertEquals("Hello", "Hello");
    4. assertEquals(true, true);
    5. assertEquals(undefined, undefined);
    6. assertEquals(new Date(), new Date());
    7. assertEquals(new RegExp("abc"), new RegExp("abc"));
    8. class Foo {}
    9. const foo1 = new Foo();
    10. assertEquals(foo1, foo2);
    11. });
    12. Deno.test("Test Assert Not Equals", () => {
    13. assertNotEquals(1, 2);
    14. assertNotEquals("Hello", "World");
    15. assertNotEquals(true, false);
    16. assertNotEquals(undefined, "");
    17. assertNotEquals(new Date(), Date.now());
    18. assertNotEquals(new RegExp("abc"), new RegExp("def"));
    19. });

    The assertStrictEquals() assertion is best used when you wish to make a precise check against two primitive types.

    There are two methods available to assert a value contains a value, assertStringIncludes() and assertArrayIncludes().

    The assertStringIncludes() assertion does a simple includes check on a string to see if it contains the expected string.

    1. Deno.test("Test Assert String Contains", () => {
    2. assertStringIncludes("Hello World", "Hello");
    3. });

    The assertArrayIncludes() assertion is slightly more advanced and can find both a value within an array and an array of values within an array.

    1. Deno.test("Test Assert Array Contains", () => {
    2. assertArrayIncludes([1, 2, 3], [1]);
    3. assertArrayIncludes([1, 2, 3], [1, 2]);
    4. assertArrayIncludes(Array.from("Hello World"), Array.from("Hello"));
    5. });

    Regex

    You can assert regular expressions via assertMatch() and assertNotMatch() assertions.

    1. Deno.test("Test Assert Match", () => {
    2. assertMatch("abcdefghi", new RegExp("def"));
    3. const basicUrl = new RegExp("^https?://[a-z.]+.com$");
    4. assertMatch("https://www.google.com", basicUrl);
    5. assertMatch("http://facebook.com", basicUrl);
    6. });
    7. Deno.test("Test Assert Not Match", () => {
    8. assertNotMatch("abcdefghi", new RegExp("jkl"));
    9. assertNotMatch("https://deno.land/", basicUrl);

    Object

    Use assertObjectMatch to check that a JavaScript object matches a subset of the properties of an object.

    The difference between the two assertions is assertThrows() accepts a standard function and assertRejects() accepts a function which returns a .

    The assertThrows() assertion will check an error has been thrown, and optionally will check the thrown error is of the correct type, and assert the error message is as expected.

    1. Deno.test("Test Assert Throws", () => {
    2. assertThrows(
    3. () => {
    4. throw new Error("Panic!");
    5. },
    6. Error,
    7. "Panic!",
    8. );
    9. });

    The assertRejects() assertion is a little more complicated, mainly because it deals with Promises. But basically it will catch thrown errors or rejections in Promises. You can also optionally check for the error type and error message. This can be used similar to assertThrows() but with async functions.

    1. Deno.test("Test Assert Throws Async", () => {
    2. await assertRejects(
    3. () => {
    4. return new Promise(() => {
    5. throw new Error("Panic! Threw Error");
    6. });
    7. },
    8. Error,
    9. "Panic! Threw Error",
    10. );
    11. await assertRejects(
    12. () => {
    13. return Promise.reject(new Error("Panic! Reject Error"));
    14. },
    15. Error,
    16. "Panic! Reject Error",
    17. );
    18. });

    Custom Messages

    Each of Deno’s built-in assertions allow you to overwrite the standard CLI error message if you wish. For instance this example will output “Values Don’t Match!” rather than the standard CLI error message.

    1. Deno.test("Test Assert Equal Fail Custom Message", () => {
    2. assertEquals(1, 2, "Values Don't Match!");
    3. });

    Custom Tests

    While Deno comes with powerful assertions modules but there is always something specific to the project you can add. Creating custom assertion function can improve readability and reduce the amount of code.

    Use this matcher in your code like this:

    1. Deno.test("Test Assert PowerOf", () => {
    2. assertPowerOf(8, 2);
    3. });