搭建 Vitest 测试框架;新增答案等价判定 lib(answer-match),QuizQ 支持 judgeMode
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Haiku 4.5
parent
637c6032d4
commit
bb8bb25096
@@ -0,0 +1,45 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { answersMatch, normalizeAnswer } from "./answer-match";
|
||||
|
||||
describe("normalizeAnswer", () => {
|
||||
it("分数转小数", () => {
|
||||
expect(normalizeAnswer("1/2")).toBe("0.5");
|
||||
expect(normalizeAnswer("2/4")).toBe("0.5");
|
||||
});
|
||||
it("百分数转小数", () => {
|
||||
expect(normalizeAnswer("50%")).toBe("0.5");
|
||||
});
|
||||
it("小数去尾零", () => {
|
||||
expect(normalizeAnswer("0.50")).toBe("0.5");
|
||||
});
|
||||
it("整数原样", () => {
|
||||
expect(normalizeAnswer("10")).toBe("10");
|
||||
});
|
||||
it("文本去空白/全角/大小写", () => {
|
||||
expect(normalizeAnswer("ABC")).toBe("abc");
|
||||
expect(normalizeAnswer("10 个")).toBe("10个");
|
||||
});
|
||||
});
|
||||
|
||||
describe("answersMatch", () => {
|
||||
it("等值命中:1/2 ≡ 0.5", () => {
|
||||
expect(answersMatch(["0.5", "1/2"], "1/2")).toBe(true);
|
||||
expect(answersMatch(["0.5"], "0.50")).toBe(true);
|
||||
});
|
||||
it("百分数命中", () => {
|
||||
expect(answersMatch(["0.5"], "50%")).toBe(true);
|
||||
});
|
||||
it("文本大小写/全角不敏感", () => {
|
||||
expect(answersMatch(["across"], "ACROSS")).toBe(true);
|
||||
});
|
||||
it("单位严格:10个 ≠ 10", () => {
|
||||
expect(answersMatch(["10个"], "10")).toBe(false);
|
||||
expect(answersMatch(["10", "10个"], "10个")).toBe(true);
|
||||
});
|
||||
it("空白答案不判对", () => {
|
||||
expect(answersMatch(["0.5"], " ")).toBe(false);
|
||||
});
|
||||
it("空期望数组不判对", () => {
|
||||
expect(answersMatch([], "0.5")).toBe(false);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user