58 lines
2.1 KiB
TypeScript
58 lines
2.1 KiB
TypeScript
import { act, renderHook } from "@testing-library/react";
|
|
import { describe, expect, it, vi } from "vitest";
|
|
|
|
import { EGG_VERSES, pickEggVerse, useEasterEgg } from "./useEasterEgg";
|
|
|
|
describe("useEasterEgg", () => {
|
|
it("连点 5 次触发 onReveal", () => {
|
|
const onReveal = vi.fn();
|
|
const { result } = renderHook(() => useEasterEgg({ onReveal }));
|
|
for (let i = 0; i < 5; i++) act(() => result.current.onClick());
|
|
expect(onReveal).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
it("不足 5 次不触发 onReveal", () => {
|
|
const onReveal = vi.fn();
|
|
const { result } = renderHook(() => useEasterEgg({ onReveal }));
|
|
for (let i = 0; i < 4; i++) act(() => result.current.onClick());
|
|
expect(onReveal).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it("连点 9 次触发 onAscend(九枢升格)", () => {
|
|
const onAscend = vi.fn();
|
|
const { result } = renderHook(() => useEasterEgg({ onAscend }));
|
|
for (let i = 0; i < 9; i++) act(() => result.current.onClick());
|
|
expect(onAscend).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
it("双层彩蛋:5 次弹谶语、9 次升格,各触发一次", () => {
|
|
const onReveal = vi.fn();
|
|
const onAscend = vi.fn();
|
|
const { result } = renderHook(() => useEasterEgg({ onReveal, onAscend }));
|
|
for (let i = 0; i < 9; i++) act(() => result.current.onClick());
|
|
expect(onReveal).toHaveBeenCalledTimes(1);
|
|
expect(onAscend).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
it("升格后归零,可再次触发双层", () => {
|
|
const onReveal = vi.fn();
|
|
const onAscend = vi.fn();
|
|
const { result } = renderHook(() => useEasterEgg({ onReveal, onAscend }));
|
|
for (let i = 0; i < 9; i++) act(() => result.current.onClick());
|
|
for (let i = 0; i < 9; i++) act(() => result.current.onClick());
|
|
expect(onReveal).toHaveBeenCalledTimes(2);
|
|
expect(onAscend).toHaveBeenCalledTimes(2);
|
|
});
|
|
|
|
it("pickEggVerse 返回谶语池中一条", () => {
|
|
expect(EGG_VERSES).toContain(pickEggVerse());
|
|
});
|
|
|
|
it("未传回调时达阈值不抛错", () => {
|
|
const { result } = renderHook(() => useEasterEgg());
|
|
expect(() => {
|
|
for (let i = 0; i < 9; i++) act(() => result.current.onClick());
|
|
}).not.toThrow();
|
|
});
|
|
});
|