mocks
方法
clearMocks
clearMocks():
void
清除本模块中其他函数注入的模拟函数/数据。如果使用的测试运行程序没有为每个测试提供一个新的窗口对象,调用此函数将重置 tauri 的特定属性。
示例
import { mockWindows, clearMocks } from "@tauri-apps/api/mocks"
afterEach(() => {
clearMocks()
})
test("mocked windows", () => {
mockWindows("main", "second", "third");
expect(window).toHaveProperty("__TAURI_METADATA__")
})
test("no mocked windows", () => {
expect(window).not.toHaveProperty("__TAURI_METADATA__")
})
自1.0.0版本起
返回值: void
mockIPC
mockIPC(
cb
:fn
):void
使用给定的 mock 处理程序拦截所有 IPC 请求。
该函数可用于测试 tauri 前端应用程序,或在静态网站生成过程中在 Node.js 上下文中运行前端时使用。
示例
使用 vitest 进行测试:
import { mockIPC, clearMocks } from "@tauri-apps/api/mocks"
import { invoke } from "@tauri-apps/api/tauri"
afterEach(() => {
clearMocks()
})
test("mocked command", () => {
mockIPC((cmd, args) => {
switch (cmd) {
case "add":
return (args.a as number) + (args.b as number);
default:
break;
}
});
expect(invoke('add', { a: 12, b: 15 })).resolves.toBe(27);
})
回调函数也可以返回一个 Promise:
import { mockIPC, clearMocks } from "@tauri-apps/api/mocks"
import { invoke } from "@tauri-apps/api/tauri"
afterEach(() => {
clearMocks()
})
test("mocked command", () => {
mockIPC((cmd, args) => {
if(cmd === "get_data") {
return fetch("https://example.com/data.json")
.then((response) => response.json())
}
});
expect(invoke('get_data')).resolves.toBe({ foo: 'bar' });
})
自1.0.0版本起
参数
名称 | 类型 |
---|---|
cb |
(cmd : string , args : Record <string , unknown >) => any |
返回值: void
mockWindows
mockWindows(
current
:string
, ...additionalWindows
:string
[]):void
模拟一个或多个窗口标签。在非tauri 环境下,需要在使用 @tauriapps/api/window
模块之前调用该函数。
该函数仅模拟窗口的存在,窗口属性(如宽度和高度)可使用 mockIPC
函数像普通 IPC 调用一样进行模拟。
示例
import { mockWindows } from "@tauri-apps/api/mocks";
import { getCurrent } from "@tauri-apps/api/window";
mockWindows("main", "second", "third");
const win = getCurrent();
win.label // "main"
import { mockWindows } from "@tauri-apps/api/mocks";
mockWindows("main", "second", "third");
mockIPC((cmd, args) => {
if (cmd === "tauri") {
if (
args?.__tauriModule === "Window" &&
args?.message?.cmd === "manage" &&
args?.message?.data?.cmd?.type === "close"
) {
console.log('closing window!');
}
}
});
const { getCurrent } = await import("@tauri-apps/api/window");
const win = getCurrent();
await win.close(); // 这将导致模拟的 IPC 处理程序向控制台发送日志。
自1.0.0版本起
参数
名称 | 类型 | 描述 |
---|---|---|
current |
string |
此 JavaScript 上下文运行时的窗口标签。 |
...additionalWindows |
string [] |
应用程序的其他窗口标签。 |
返回值: void