65 lines · 2.3 KB · TypeScript
RawDownload
import { afterEach, beforeEach, describe, expect, it, vi } from "vite-plus/test"; const expoMocks = vi.hoisted(() => ({  requireNativeView: vi.fn(),}));const nativeView = () => null;const originalExpo = globalThis.expo; function setExpoViewConfigAvailable() {  globalThis.expo = {    getViewConfig: vi.fn().mockReturnValue({ validAttributes: {}, directEventTypes: {} }),  } as unknown as typeof globalThis.expo;} vi.mock("expo", () => ({  requireNativeView: expoMocks.requireNativeView,})); describe("resolveNativeTerminalSurfaceView", () => {  beforeEach(() => {    vi.clearAllMocks();    vi.resetModules();    globalThis.expo = undefined as unknown as typeof globalThis.expo;  });   afterEach(() => {    globalThis.expo = originalExpo;  });   it("returns null when the native terminal view config is unavailable", async () => {    const { resolveNativeTerminalSurfaceView } = await import("./nativeTerminalModule");    expect(resolveNativeTerminalSurfaceView()).toBeNull();    expect(expoMocks.requireNativeView).not.toHaveBeenCalled();  });   it("returns the native terminal view when the view config is installed", async () => {    setExpoViewConfigAvailable();    expoMocks.requireNativeView.mockReturnValue(nativeView);    const { resolveNativeTerminalSurfaceView } = await import("./nativeTerminalModule");    expect(resolveNativeTerminalSurfaceView()).toBe(nativeView);    expect(expoMocks.requireNativeView).toHaveBeenCalledWith("T3TerminalSurface");  });   it("returns null when the view manager cannot be required", async () => {    setExpoViewConfigAvailable();    const cause = new Error("boom");    expoMocks.requireNativeView.mockImplementation(() => {      throw cause;    });    const consoleError = vi.spyOn(console, "error").mockImplementation(() => undefined);    const { resolveNativeTerminalSurfaceView } = await import("./nativeTerminalModule");     expect(resolveNativeTerminalSurfaceView()).toBeNull();    expect(resolveNativeTerminalSurfaceView()).toBeNull();    expect(expoMocks.requireNativeView).toHaveBeenCalledTimes(1);    expect(consoleError).toHaveBeenCalledWith(      expect.objectContaining({        _tag: "NativeViewResolutionError",        nativeModuleName: "T3TerminalSurface",        cause,      }),    );    expect(consoleError).toHaveBeenCalledTimes(1);  });});