fix(deploy): pin distinct image tags per compose (booklib/{api,web}:{dev,prod}); same project name shared default tags so dev up without --build ran the prod image
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
import { afterEach, beforeEach, expect, it, vi } from "vitest";
|
||||
import { createProgressSaver } from "../src/lib/progress";
|
||||
|
||||
type Sent = [Record<string, unknown>, number, boolean];
|
||||
|
||||
beforeEach(() => vi.useFakeTimers());
|
||||
afterEach(() => vi.useRealTimers());
|
||||
|
||||
it("leading 立即发;间隔内多次 report 合并成一次 trailing", () => {
|
||||
const sent: Sent[] = [];
|
||||
const s = createProgressSaver((l, p, ka) => {
|
||||
sent.push([l, p, ka]);
|
||||
return Promise.resolve();
|
||||
});
|
||||
s.report({ page: 1 }, 0.1);
|
||||
expect(sent.length).toBe(1);
|
||||
s.report({ page: 2 }, 0.2);
|
||||
s.report({ page: 3 }, 0.3);
|
||||
expect(sent.length).toBe(1);
|
||||
vi.advanceTimersByTime(4999);
|
||||
expect(sent.length).toBe(1);
|
||||
vi.advanceTimersByTime(1);
|
||||
expect(sent.length).toBe(2);
|
||||
expect(sent[1]).toEqual([{ page: 3 }, 0.3, false]);
|
||||
});
|
||||
|
||||
it("flush 立刻尾随发送且 keepalive=true;重复值去重;清空挂起", () => {
|
||||
const sent: Sent[] = [];
|
||||
const s = createProgressSaver((l, p, ka) => {
|
||||
sent.push([l, p, ka]);
|
||||
return Promise.resolve();
|
||||
});
|
||||
s.report({ page: 0 }, 0);
|
||||
s.report({ page: 5 }, 0.5);
|
||||
s.flush();
|
||||
expect(sent.length).toBe(2);
|
||||
expect(sent[1]).toEqual([{ page: 5 }, 0.5, true]);
|
||||
s.flush();
|
||||
expect(sent.length).toBe(2);
|
||||
vi.advanceTimersByTime(10_000);
|
||||
expect(sent.length).toBe(2); // 挂起已被 flush 消费,定时器不再补发
|
||||
});
|
||||
Reference in New Issue
Block a user