mirror of
https://github.com/oven-sh/bun
synced 2026-02-11 03:18:53 +00:00
* Various docs updates * Add mocks page * Fix make * WebKit instructions * Update instructions * Updates * Update nodejs compat table * Document trusted deps * Tweak trustedDependencies docs * Document --exact * Update test docs * Tweaks * Boring * Remove redundant j * Undo makefile changes * Undo makefile changes * Update page title * Regen * Undo changes
56 lines
1.2 KiB
Markdown
56 lines
1.2 KiB
Markdown
Create mocks with the `mock` function.
|
|
|
|
```ts
|
|
import { test, expect, mock } from "bun:test";
|
|
const random = mock(() => Math.random());
|
|
|
|
test("random", async () => {
|
|
const val = random();
|
|
expect(val).toBeGreaterThan(0);
|
|
expect(random).toHaveBeenCalled();
|
|
expect(random).toHaveBeenCalledTimes(1);
|
|
});
|
|
```
|
|
|
|
The result of `mock()` is a new function that's been decorated with some additional properties.
|
|
|
|
```ts
|
|
import { mock } from "bun:test";
|
|
const random = mock((multiplier: number) => multiplier * Math.random());
|
|
|
|
random(2);
|
|
random(10);
|
|
|
|
random.mock.calls;
|
|
// [[ 2 ], [ 10 ]]
|
|
|
|
random.mock.results;
|
|
// [
|
|
// { type: "return", value: 0.6533907460954099 },
|
|
// { type: "return", value: 0.6452713933037312 }
|
|
// ]
|
|
```
|
|
|
|
## `.spyOn()`
|
|
|
|
It's possible to track calls to a function without replacing it with a mock. Use `spyOn()` to create a spy; these spies can be passed to `.toHaveBeenCalled()` and `.toHaveBeenCalledTimes()`.
|
|
|
|
```ts
|
|
import { test, expect, spyOn } from "bun:test";
|
|
|
|
const ringo = {
|
|
name: "Ringo",
|
|
sayHi() {
|
|
console.log(`Hello I'm ${this.name}`);
|
|
},
|
|
};
|
|
|
|
const spy = spyOn(ringo, "sayHi");
|
|
|
|
test("spyon", () => {
|
|
expect(spy).toHaveBeenCalledTimes(0);
|
|
ringo.sayHi();
|
|
expect(spy).toHaveBeenCalledTimes(1);
|
|
});
|
|
```
|