Files
sundynix-pets/tests/pet-avatar.test.cjs
Blizzard fbc1eda561
ci-cd / verify (push) Successful in 6s
ci-cd / deploy (push) Skipped
fix: ignore cancelled pet photo selection
2026-10-05 20:13:10 +08:00

77 lines
2.5 KiB
JavaScript

const test = require("node:test");
const assert = require("node:assert/strict");
const fs = require("node:fs");
const vm = require("node:vm");
const path = require("node:path");
function screen(chooseMedia, upload) {
let definition;
const errors = [];
vm.runInNewContext(
fs.readFileSync(path.join(__dirname, "../pets-fe/pages/pet-edit/pet-edit.js"), "utf8"),
{
Page: (value) => { definition = value; },
wx: { chooseMedia },
require: () => ({ upload, toast: (error) => errors.push(error) }),
},
);
return {
...definition,
data: { ...definition.data, avatar_file_id: "original-id", avatar_url: "original-photo" },
errors,
setData(changes) { Object.assign(this.data, changes); },
};
}
test("取消选择宠物照片不上传、不提示错误,保留原头像", async () => {
let uploads = 0;
const page = screen(
async () => { throw { errMsg: "chooseMedia:fail cancel" }; },
async () => { uploads++; },
);
await page.choose();
assert.equal(uploads, 0);
assert.equal(page.errors.length, 0);
assert.equal(page.data.avatar_file_id, "original-id");
assert.equal(page.data.avatar_url, "original-photo");
});
test("空的照片选择结果不上传", async () => {
const page = screen(async () => ({ tempFiles: [] }), async () => assert.fail("不应上传"));
await page.choose();
assert.equal(page.errors.length, 0);
assert.equal(page.data.avatar_file_id, "original-id");
});
test("实际选择失败仍提示错误", async () => {
const error = { errMsg: "chooseMedia:fail permission denied" };
const page = screen(async () => { throw error; }, async () => assert.fail("不应上传"));
await page.choose();
assert.equal(page.errors[0], error);
});
test("实际上传失败仍提示错误并保留原头像", async () => {
const error = new Error("上传失败");
const page = screen(
async () => ({ tempFiles: [{ tempFilePath: "/tmp/photo.jpg" }] }),
async () => { throw error; },
);
await page.choose();
assert.equal(page.errors[0], error);
assert.equal(page.data.avatar_file_id, "original-id");
});
test("上传成功后更新宠物头像", async () => {
const page = screen(
async () => ({ tempFiles: [{ tempFilePath: "/tmp/photo.jpg" }] }),
async (filePath) => {
assert.equal(filePath, "/tmp/photo.jpg");
return { id: "new-id", url: "new-photo" };
},
);
await page.choose();
assert.equal(page.errors.length, 0);
assert.equal(page.data.avatar_file_id, "new-id");
assert.equal(page.data.avatar_url, "new-photo");
});