From 0ae079fe50c674824e86a1a0aeb4d2dbd5721dbf Mon Sep 17 00:00:00 2001 From: "Yasser A.Idrissi" Date: Mon, 15 Mar 2021 15:47:14 +0100 Subject: [PATCH] docs(testing): Add custom test example (#9791) --- docs/testing/assertions.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/docs/testing/assertions.md b/docs/testing/assertions.md index 7d7bc69b37..5fca77832e 100644 --- a/docs/testing/assertions.md +++ b/docs/testing/assertions.md @@ -231,3 +231,33 @@ Deno.test("Test Assert Equal Fail Custom Message", () => { assertEquals(1, 2, "Values Don't Match!"); }); ``` + +### Custom Tests + +While Deno comes with powerful +[assertions modules](https://deno.land/std@$STD_VERSION/testing/asserts.ts) 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. + +```js +function assertPowerOf(actual: number, expected: number, msg?: string): void { + let received = actual; + while (received % expected === 0) received = received / expected; + if (received !== 1) { + if (!msg) { + msg = `actual: "${actual}" expected to be a power of : "${expected}"`; + } + throw new AssertionError(msg); + } +} +``` + +Use this matcher in your code like this: + +```js +Deno.test("Test Assert PowerOf", () => { + assertPowerOf(8, 2); + assertPowerOf(11, 4); +}); +```