Skip to content

Commit

Permalink
docs(examples): add example for spy functions (#1222)
Browse files Browse the repository at this point in the history
  • Loading branch information
adairo authored Dec 2, 2024
1 parent db2b92a commit fc816f4
Showing 1 changed file with 49 additions and 0 deletions.
49 changes: 49 additions & 0 deletions examples/spy-functions.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/**
* @title Spy functions
* @difficulty intermediate
* @tags cli, deploy
* @run <url>
* @resource {https://jsr.io/@std/testing/doc/mock#spying} Spy docs on JSR
* @resource {https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-2.html} Typescript docs for `using` keyword
* @group Testing
*
* A function spy allow us to assert that a function was called with the correct arguments and a specific number of times.
* This snippet demonstrates how to spy on a function using a mock function.
*/

import { assertSpyCall, assertSpyCalls, spy } from "jsr:@std/testing/mock";

function log(message: string) {
console.log(message);
}

const logger = { log };

Deno.test("logger uses the log function", () => {
// Create a spy on the `logger.log` method.
const logSpy = spy(logger, "log");

// Call the `logger.log` method.
logger.log("Hello, world!");

try {
// Assert that the `log` function was called just once.
assertSpyCalls(logSpy, 1);

// Assert that the `log` function was called with the correct arguments.
assertSpyCall(logSpy, 0, { args: ["Hello, world!"] });
} finally {
// Restore the logger.log function to stop spying it.
logSpy.restore();
}
});

Deno.test("Creating a spy with the using keyword", () => {
// method spys are disposable, so we can create them with the keyword `using`
using logSpy = spy(logger, "log");

logger.log("Disposable spy");

// Spys created with the `using` keyword are automatically restored at the end of the test
assertSpyCalls(logSpy, 1);
});

0 comments on commit fc816f4

Please sign in to comment.