From aefb7b7dcb3f784583054384401db0c81556d251 Mon Sep 17 00:00:00 2001 From: Jon Date: Thu, 10 Apr 2025 09:34:18 +0200 Subject: [PATCH] feat: refs #8647 vitest fail on warning --- src/boot/__tests__/axios.spec.js | 4 +- src/composables/__tests__/useSession.spec.js | 134 +++++++++---------- test/vitest/setup-file.js | 33 +++-- 3 files changed, 88 insertions(+), 83 deletions(-) diff --git a/src/boot/__tests__/axios.spec.js b/src/boot/__tests__/axios.spec.js index 85d578517..45a3cc7f0 100644 --- a/src/boot/__tests__/axios.spec.js +++ b/src/boot/__tests__/axios.spec.js @@ -67,7 +67,7 @@ describe('Axios boot', () => { }; const result = onResponseError(error); - expect(result).rejects.toEqual(expect.objectContaining(error)); + await expect(result).rejects.toEqual(expect.objectContaining(error)); }); it('should call to the Notify plugin with a message from the response property', async () => { @@ -83,7 +83,7 @@ describe('Axios boot', () => { }; const result = onResponseError(error); - expect(result).rejects.toEqual(expect.objectContaining(error)); + await expect(result).rejects.toEqual(expect.objectContaining(error)); }); }); }); diff --git a/src/composables/__tests__/useSession.spec.js b/src/composables/__tests__/useSession.spec.js index e86847b70..eb390e096 100644 --- a/src/composables/__tests__/useSession.spec.js +++ b/src/composables/__tests__/useSession.spec.js @@ -64,88 +64,84 @@ describe('session', () => { }); }); - describe( - 'login', - () => { - const expectedUser = { - id: 999, - name: `T'Challa`, - nickname: 'Black Panther', - lang: 'en', - userConfig: { - darkMode: false, + describe('login', () => { + const expectedUser = { + id: 999, + name: `T'Challa`, + nickname: 'Black Panther', + lang: 'en', + userConfig: { + darkMode: false, + }, + worker: { department: { departmentFk: 155 } }, + }; + const rolesData = [ + { + role: { + name: 'salesPerson', }, - worker: { department: { departmentFk: 155 } }, - }; - const rolesData = [ - { - role: { - name: 'salesPerson', - }, + }, + { + role: { + name: 'admin', }, - { - role: { - name: 'admin', - }, - }, - ]; - beforeEach(() => { - vi.spyOn(axios, 'get').mockImplementation((url) => { - if (url === 'VnUsers/acls') return Promise.resolve({ data: [] }); - return Promise.resolve({ - data: { roles: rolesData, user: expectedUser }, - }); + }, + ]; + beforeEach(() => { + vi.spyOn(axios, 'get').mockImplementation((url) => { + if (url === 'VnUsers/acls') return Promise.resolve({ data: [] }); + return Promise.resolve({ + data: { roles: rolesData, user: expectedUser }, }); }); + }); - it('should fetch the user roles and then set token in the sessionStorage', async () => { - const expectedRoles = ['salesPerson', 'admin']; - const expectedToken = 'mySessionToken'; - const expectedTokenMultimedia = 'mySessionTokenMultimedia'; - const keepLogin = false; + it('should fetch the user roles and then set token in the sessionStorage', async () => { + const expectedRoles = ['salesPerson', 'admin']; + const expectedToken = 'mySessionToken'; + const expectedTokenMultimedia = 'mySessionTokenMultimedia'; + const keepLogin = false; - await session.login({ - token: expectedToken, - tokenMultimedia: expectedTokenMultimedia, - keepLogin, - }); - - const roles = state.getRoles(); - const localToken = localStorage.getItem('token'); - const sessionToken = sessionStorage.getItem('token'); - - expect(roles.value).toEqual(expectedRoles); - expect(localToken).toBeNull(); - expect(sessionToken).toEqual(expectedToken); - - await session.destroy(); // this clears token and user for any other test + await session.login({ + token: expectedToken, + tokenMultimedia: expectedTokenMultimedia, + keepLogin, }); - it('should fetch the user roles and then set token in the localStorage', async () => { - const expectedRoles = ['salesPerson', 'admin']; - const expectedToken = 'myLocalToken'; - const expectedTokenMultimedia = 'myLocalTokenMultimedia'; - const keepLogin = true; + const roles = state.getRoles(); + const localToken = localStorage.getItem('token'); + const sessionToken = sessionStorage.getItem('token'); - await session.login({ - token: expectedToken, - tokenMultimedia: expectedTokenMultimedia, - keepLogin, - }); + expect(roles.value).toEqual(expectedRoles); + expect(localToken).toBeNull(); + expect(sessionToken).toEqual(expectedToken); - const roles = state.getRoles(); - const localToken = localStorage.getItem('token'); - const sessionToken = sessionStorage.getItem('token'); + await session.destroy(); // this clears token and user for any other test + }); - expect(roles.value).toEqual(expectedRoles); - expect(localToken).toEqual(expectedToken); - expect(sessionToken).toBeNull(); + it('should fetch the user roles and then set token in the localStorage', async () => { + const expectedRoles = ['salesPerson', 'admin']; + const expectedToken = 'myLocalToken'; + const expectedTokenMultimedia = 'myLocalTokenMultimedia'; + const keepLogin = true; - await session.destroy(); // this clears token and user for any other test + await session.login({ + token: expectedToken, + tokenMultimedia: expectedTokenMultimedia, + keepLogin, }); - }, - {}, - ); + + const roles = state.getRoles(); + const localToken = localStorage.getItem('token'); + const sessionToken = sessionStorage.getItem('token'); + + expect(roles.value).toEqual(expectedRoles); + expect(localToken).toEqual(expectedToken); + expect(sessionToken).toBeNull(); + + await session.destroy(); // this clears token and user for any other test + }); + }); describe('RenewToken', () => { const expectedToken = 'myToken'; diff --git a/test/vitest/setup-file.js b/test/vitest/setup-file.js index f0b577e85..6b49d958f 100644 --- a/test/vitest/setup-file.js +++ b/test/vitest/setup-file.js @@ -1,17 +1,26 @@ -import { vi } from 'vitest'; -import { config } from '@vue/test-utils'; +import { afterAll, beforeAll, vi } from 'vitest'; -// beforeEach(() => { -// vi.spyOn(console, 'warn').mockImplementation((message) => { -// console.log('WARNING: ', message); -// throw new Error(`Test failed due to console.warn: ${message}`); -// }); +let vueWarnings = []; -// vi.spyOn(console, 'error').mockImplementation((message) => { -// console.log('FALLO: ', message); -// throw new Error(`Test failed due to console.warn: ${message}`); -// }); -// }); +const originalConsoleWarn = console.warn; + +beforeAll(() => { + console.warn = (...args) => { + vueWarnings.push(args.join(' ')); + }; +}); + +afterEach(() => { + if (vueWarnings.length > 0) { + const allWarnings = vueWarnings.join('\n'); + vueWarnings = []; + throw new Error(`Vue warnings detected during test:\n${allWarnings}`); + } +}); + +afterAll(() => { + console.warn = originalConsoleWarn; +}); vi.mock('axios'); vi.mock('vue-router', () => ({