2025-06-27 18:50:23 +08:00

53 lines
1.6 KiB
JavaScript

import { rest } from 'msw';
import router from '@/router';
import fetch from 'node-fetch';
import { setupServer } from 'msw/node';
import { config } from '@vue/test-utils';
import resourceManager from '@/resourceManager';
import { components } from '@/components/global/register';
import { afterAll, afterEach, beforeAll, vi } from 'vitest';
import outsideClickDirective from '@/components/global/outsideClickDirective';
const FAKE_BASE_URL = 'http://fc.tests';
const restHandlers = [
rest.post(
FAKE_BASE_URL + '/api/action/jcloud.api.site.features',
(req, res, ctx) => {
return res(ctx.status(200), ctx.json({ message: apps }));
}
)
];
const server = setupServer(...restHandlers);
beforeAll(() => {
setupGlobalConfig(config); // Plugins, global components etc.
// Have to mock fetch, since tests run in node environment
vi.stubGlobal('fetch', (url, options) => fetch(FAKE_BASE_URL + url, options));
// Starts the msw server
server.listen({ onUnhandledRequest: 'error' });
});
// Close server after all tests
afterAll(() => server.close());
afterEach(() => server.resetHandlers());
export function setupGlobalConfig(config) {
const globalComponents = {};
for (let path in components) {
let component = components[path];
let name = path.replace('./', '').replace('.vue', '');
globalComponents[name] = component.default || component;
}
config.global.components = globalComponents;
config.global.plugins = [resourceManager, router];
config.global.directives = {
'on-outside-click': outsideClickDirective
};
}