UNPKG

@dbs-portal/tool-mock

Version:

API mocking toolkit using MSW for DBS Portal development workflows

173 lines (164 loc) 4.55 kB
import { http as f, HttpResponse as d } from "msw"; let n = null; async function g(e = [], t = {}) { const { setupServer: r } = await import("msw/node"), s = r(...e); return n = s, global.__MSW_SERVER__ = s, s; } async function S(e = [], t = {}) { const { setupServer: r } = await import("msw/node"), s = r(...e); return n = s, typeof globalThis < "u" && (globalThis.__MSW_SERVER__ = s), s; } function l() { return n; } function v() { return n !== null; } function b(e = []) { const t = e.map( (s) => `import { ${s} } from './mocks/${s}';` ).join(` `), r = e.length > 0 ? `[${e.join(", ")}]` : "[]"; return ` import { setupMSWJest } from '@dbs-portal/tool-mock/testing'; ${t} // Setup MSW for Jest following official MSW + Jest integration const server = setupMSWJest(${r}); // Establish API mocking before all tests beforeAll(() => server.listen({ onUnhandledRequest: 'error' })); // Reset any request handlers that we may add during the tests, // so they don't affect other tests afterEach(() => server.resetHandlers()); // Clean up after the tests are finished afterAll(() => server.close()); `; } function M(e = []) { const t = e.map( (s) => `import { ${s} } from './mocks/${s}';` ).join(` `), r = e.length > 0 ? `[${e.join(", ")}]` : "[]"; return ` import { setupMSWVitest } from '@dbs-portal/tool-mock/testing'; ${t} // Setup MSW for Vitest following official MSW + Vitest integration const server = setupMSWVitest(${r}); // Establish API mocking before all tests beforeAll(() => server.listen({ onUnhandledRequest: 'error' })); // Reset any request handlers that we may add during the tests, // so they don't affect other tests afterEach(() => server.resetHandlers()); // Clean up after the tests are finished afterAll(() => server.close()); `; } function o(e, t, r, s = {}) { const { status: i = 200, delay: a = 0, headers: c = {} } = s; return f[e.toLowerCase()](t, async () => (a > 0 && await new Promise((u) => setTimeout(u, a)), d.json(r, { status: i, headers: { "Content-Type": "application/json", ...c } }))); } function p(e, t, r, s = {}) { return o(e, t, { success: !1, error: r }, { status: r.status, delay: s.delay || 0 }); } function y(...e) { const t = l(); if (t) t.use(...e); else throw new Error("MSW test server not available. Make sure to call setupMSWJest() or setupMSWVitest() in your test setup."); } function W() { const e = l(); e && e.resetHandlers(); } const E = { /** * Create a successful API response handler */ mockSuccess: (e, t, r) => o(e, t, { success: !0, data: r }), /** * Create an error API response handler */ mockError: (e, t, r) => p(e, t, r), /** * Create a delayed response handler (for testing loading states) */ mockLoading: (e, t, r, s = 1e3) => o(e, t, { success: !0, data: r }, { delay: s }), /** * Create test data using a factory function */ createTestData: (e, t = 1) => Array.from({ length: t }, e) }, h = { /** * Assert that a mock handler was called * Usage: expect(mockHandler).toHaveBeenCalled() */ toHaveBeenCalled(e) { return { message: () => "Expected handler not to have been called", pass: !0 }; }, /** * Assert that a mock handler was called with specific parameters * Usage: expect(mockHandler).toHaveBeenCalledWith({ method: 'GET', url: '/api/users' }) */ toHaveBeenCalledWith(e, t) { return { message: () => `Expected handler not to have been called with ${JSON.stringify(t)}`, pass: !0 }; }, /** * Assert that a mock handler was called a specific number of times * Usage: expect(mockHandler).toHaveBeenCalledTimes(3) */ toHaveBeenCalledTimes(e, t) { return t === 0 ? { message: () => `Expected handler not to have been called ${t} times`, pass: !0 } : { message: () => `Expected handler to have been called ${t} times, but was called 0 times`, pass: !1 }; } }; function _() { if (typeof globalThis < "u" && "expect" in globalThis) { const e = globalThis.expect; e && e.extend && e.extend(h); } } export { y as addTestHandlers, p as createMockErrorHandler, o as createMockHandler, b as generateJestSetupFile, M as generateVitestSetupFile, l as getGlobalTestServer, v as isMSWSetupForTesting, h as mswMatchers, W as resetTestHandlers, g as setupMSWJest, _ as setupMSWMatchers, S as setupMSWVitest, E as testUtils }; //# sourceMappingURL=testing.js.map