diff --git a/web/.eslintrc.cjs b/web/.eslintrc.cjs index a128a6c..770caf4 100644 --- a/web/.eslintrc.cjs +++ b/web/.eslintrc.cjs @@ -7,7 +7,7 @@ module.exports = { 'plugin:react/jsx-runtime', 'plugin:react-hooks/recommended', ], - ignorePatterns: ['dist', '.eslintrc.cjs'], + ignorePatterns: ['dist', 'coverage', '.eslintrc.cjs'], parserOptions: { ecmaVersion: 'latest', sourceType: 'module' }, settings: { react: { version: '18.2' } }, plugins: ['react-refresh'], diff --git a/web/.gitignore b/web/.gitignore index d600b6c..d700a72 100644 --- a/web/.gitignore +++ b/web/.gitignore @@ -10,6 +10,7 @@ lerna-debug.log* node_modules dist dist-ssr +coverage *.local # Editor directories and files diff --git a/web/src/test/setup.js b/web/src/test/setup.js index ddbd467..2c2fabb 100644 --- a/web/src/test/setup.js +++ b/web/src/test/setup.js @@ -16,12 +16,15 @@ if (globalThis.__VITEST_SETUP_LOADED__) { // Extend Vitest's expect with accessibility matchers expect.extend({ toHaveNoViolations }); - // Mock ResizeObserver (needed for Recharts) - globalThis.ResizeObserver = vi.fn().mockImplementation(() => ({ - observe: vi.fn(), - unobserve: vi.fn(), - disconnect: vi.fn(), - })); + // Mock ResizeObserver (needed for Recharts). A plain class rather than + // vi.fn().mockImplementation(): Recharts calls `new ResizeObserver(...)`, + // and whether a mock function is constructible is a vitest implementation + // detail that changed in v5. + globalThis.ResizeObserver = class ResizeObserver { + observe() {} + unobserve() {} + disconnect() {} + }; // Mock scrollIntoView (needed for Logs component) Element.prototype.scrollIntoView = vi.fn();