From 978d000a0cdf3ecd69c5cb138da04e280f8b70fa Mon Sep 17 00:00:00 2001 From: Joseph Brooksbank Date: Tue, 8 Jul 2025 09:47:46 -0700 Subject: [PATCH 1/3] docs(mocking): add note about event mocking --- .../develop/Tests/{mocking.md => mocking.mdx} | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) rename src/content/docs/develop/Tests/{mocking.md => mocking.mdx} (84%) diff --git a/src/content/docs/develop/Tests/mocking.md b/src/content/docs/develop/Tests/mocking.mdx similarity index 84% rename from src/content/docs/develop/Tests/mocking.md rename to src/content/docs/develop/Tests/mocking.mdx index 1223774020..7a9baf1653 100644 --- a/src/content/docs/develop/Tests/mocking.md +++ b/src/content/docs/develop/Tests/mocking.mdx @@ -4,6 +4,8 @@ sidebar: order: 10 i18nReady: true --- +import SinceVersion from '../../../../components/SinceVersion.astro'; + When writing your frontend tests, having a "fake" Tauri environment to simulate windows or intercept IPC calls is common, so-called _mocking_. The [`@tauri-apps/api/mocks`] module provides some helpful tools to make this easier for you: @@ -29,6 +31,8 @@ The following examples use [Vitest], but you can use any other frontend testing ::: +### Mocking Commands for `invoke` + ```javascript import { beforeAll, expect, test } from "vitest"; import { randomFillSync } from "crypto"; @@ -124,6 +128,34 @@ mockIPC(async (cmd, args) => { }); ``` +### Mocking Events + + + +There is partial support of the [Event System] to simulate events emitted by your Rust code: + +```javascript +import { mockIPC, clearMocks } from "@tauri-apps/api/mocks" +import { emit, listen } from "@tauri-apps/api/event" +import { afterEach, expect, test, vi } from "vitest" + +test("mocked event", () => { + // a call to `mockIPC` is still required even if no `invoke` calls are mocked + mockIPC(() => { }); + + const eventHandler = vi.fn(); + listen('test-event', eventHandler); + + emit('test-event', { foo: 'bar' }); + expect(eventHandler).toHaveBeenCalledWith({ + event: 'test-event', + payload: { foo: 'bar' } + }); +}) +``` +`emitTo` and `emit_filter` are **not** supported yet. + + ## Windows Sometimes you have window-specific code (a splash screen window, for example), so you need to simulate different windows. @@ -168,3 +200,4 @@ test('invoke', async () => { [`mockwindows()`]: /reference/javascript/api/namespacemocks/#mockwindows [`clearmocks()`]: /reference/javascript/api/namespacemocks/#clearmocks [vitest]: https://vitest.dev +[Event System]: /develop/calling-frontend/#event-system From 7a3d8efb4b631e0017fc57eba4ee02a4c71957ac Mon Sep 17 00:00:00 2001 From: Joseph Brooksbank Date: Wed, 23 Jul 2025 06:21:06 -0700 Subject: [PATCH 2/3] docs(mocking): update SinceVersion and use options pattern --- src/content/docs/develop/Tests/mocking.mdx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/content/docs/develop/Tests/mocking.mdx b/src/content/docs/develop/Tests/mocking.mdx index 7a9baf1653..a5c9166e13 100644 --- a/src/content/docs/develop/Tests/mocking.mdx +++ b/src/content/docs/develop/Tests/mocking.mdx @@ -130,9 +130,9 @@ mockIPC(async (cmd, args) => { ### Mocking Events - + -There is partial support of the [Event System] to simulate events emitted by your Rust code: +There is partial support of the [Event System] to simulate events emitted by your Rust code via the `shouldMockEvents` option: ```javascript import { mockIPC, clearMocks } from "@tauri-apps/api/mocks" @@ -140,8 +140,7 @@ import { emit, listen } from "@tauri-apps/api/event" import { afterEach, expect, test, vi } from "vitest" test("mocked event", () => { - // a call to `mockIPC` is still required even if no `invoke` calls are mocked - mockIPC(() => { }); + mockIPC(() => {}, { shouldMockEvents: true }); // enable event mocking const eventHandler = vi.fn(); listen('test-event', eventHandler); From d17d934ccaa5ac566d63472c51b7ab098f3c92ab Mon Sep 17 00:00:00 2001 From: Ayres Vitor Date: Wed, 30 Jul 2025 20:18:53 -0300 Subject: [PATCH 3/3] format --- src/content/docs/develop/Tests/mocking.mdx | 32 +++++++++++----------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/content/docs/develop/Tests/mocking.mdx b/src/content/docs/develop/Tests/mocking.mdx index a5c9166e13..f5d736d505 100644 --- a/src/content/docs/develop/Tests/mocking.mdx +++ b/src/content/docs/develop/Tests/mocking.mdx @@ -4,8 +4,8 @@ sidebar: order: 10 i18nReady: true --- -import SinceVersion from '../../../../components/SinceVersion.astro'; +import SinceVersion from '../../../../components/SinceVersion.astro'; When writing your frontend tests, having a "fake" Tauri environment to simulate windows or intercept IPC calls is common, so-called _mocking_. The [`@tauri-apps/api/mocks`] module provides some helpful tools to make this easier for you: @@ -130,30 +130,30 @@ mockIPC(async (cmd, args) => { ### Mocking Events - + There is partial support of the [Event System] to simulate events emitted by your Rust code via the `shouldMockEvents` option: ```javascript -import { mockIPC, clearMocks } from "@tauri-apps/api/mocks" -import { emit, listen } from "@tauri-apps/api/event" -import { afterEach, expect, test, vi } from "vitest" +import { mockIPC, clearMocks } from '@tauri-apps/api/mocks'; +import { emit, listen } from '@tauri-apps/api/event'; +import { afterEach, expect, test, vi } from 'vitest'; -test("mocked event", () => { - mockIPC(() => {}, { shouldMockEvents: true }); // enable event mocking +test('mocked event', () => { + mockIPC(() => {}, { shouldMockEvents: true }); // enable event mocking - const eventHandler = vi.fn(); - listen('test-event', eventHandler); + const eventHandler = vi.fn(); + listen('test-event', eventHandler); - emit('test-event', { foo: 'bar' }); - expect(eventHandler).toHaveBeenCalledWith({ - event: 'test-event', - payload: { foo: 'bar' } - }); -}) + emit('test-event', { foo: 'bar' }); + expect(eventHandler).toHaveBeenCalledWith({ + event: 'test-event', + payload: { foo: 'bar' }, + }); +}); ``` -`emitTo` and `emit_filter` are **not** supported yet. +`emitTo` and `emit_filter` are **not** supported yet. ## Windows