Files
remoteconn-gitea/apps/miniprogram/utils/svgButtonFeedback.test.ts
2026-03-21 18:57:10 +08:00

75 lines
2.0 KiB
TypeScript

import { describe, expect, it, vi } from "vitest";
function loadModule() {
const resolved = require.resolve("./svgButtonFeedback.js");
delete require.cache[resolved];
return require("./svgButtonFeedback.js");
}
describe("svg button feedback helper", () => {
it("生成默认按压态数据键", () => {
const { buildSvgButtonPressData } = loadModule();
expect(buildSvgButtonPressData()).toEqual({
pressedSvgButtonKey: ""
});
expect(buildSvgButtonPressData("customPressedKey")).toEqual({
customPressedKey: ""
});
});
it("从事件里提取 press key", () => {
const { extractSvgButtonPressKey } = loadModule();
expect(
extractSvgButtonPressKey({
currentTarget: {
dataset: {
pressKey: "toolbar-ai"
}
}
})
).toBe("toolbar-ai");
expect(
extractSvgButtonPressKey({
target: {
dataset: {
customKey: "voice-main"
}
}
}, "customKey")
).toBe("voice-main");
});
it("只在状态变化时写入 setData", () => {
const { createSvgButtonPressMethods } = loadModule();
const host = {
data: {
pressedSvgButtonKey: ""
},
setData: vi.fn(function setData(patch: Record<string, string>) {
this.data = {
...this.data,
...patch
};
})
};
const methods = createSvgButtonPressMethods();
methods.setSvgButtonPressState.call(host, "records-close", true);
expect(host.data.pressedSvgButtonKey).toBe("records-close");
expect(host.setData).toHaveBeenCalledTimes(1);
methods.setSvgButtonPressState.call(host, "records-close", true);
expect(host.setData).toHaveBeenCalledTimes(1);
methods.onSvgButtonTouchEnd.call(host, {
currentTarget: {
dataset: {
pressKey: "records-close"
}
}
});
expect(host.data.pressedSvgButtonKey).toBe("");
expect(host.setData).toHaveBeenCalledTimes(2);
});
});