N
Nuxt13mo ago
dwol

How can I mock or stub Keycloak in unit tests?

So basically I have a nuxt plugin to setup Keycloak, how can I mock or stub keycloak during unit tests? This is my plugin
import Keycloak from 'keycloak-js'

export default defineNuxtPlugin(async (_nuxtApp) => {
const config = useRuntimeConfig()
const keycloak = new Keycloak({
url: config.public.keycloakAuthUrl,
realm: config.public.keycloakRealm,
clientId: config.public.keycloakClientId
})

try {
// init keycloak instance
await keycloak.init({
onLoad: 'check-sso',
responseMode: 'query',
pkceMethod: 'S256'
})

} catch (error) {
console.error('Failed to initialize Keycloak adapter: ', error)
}

return {
provide: {
// provide global keycloak instance
keycloak
}
}
})
import Keycloak from 'keycloak-js'

export default defineNuxtPlugin(async (_nuxtApp) => {
const config = useRuntimeConfig()
const keycloak = new Keycloak({
url: config.public.keycloakAuthUrl,
realm: config.public.keycloakRealm,
clientId: config.public.keycloakClientId
})

try {
// init keycloak instance
await keycloak.init({
onLoad: 'check-sso',
responseMode: 'query',
pkceMethod: 'S256'
})

} catch (error) {
console.error('Failed to initialize Keycloak adapter: ', error)
}

return {
provide: {
// provide global keycloak instance
keycloak
}
}
})
Then I've tried to stub useNuxtApp like this, ive also tried mocking using mockNuxtImport
vi.stubGlobal('useNuxtApp', () => ({
$keycloak: {
login: mockLogin,
logout: vi.fn(),
loadUserProfile: vi.fn(),
authenticated: false,
tokenParsed: mockParsedToken
}
}))
vi.stubGlobal('useNuxtApp', () => ({
$keycloak: {
login: mockLogin,
logout: vi.fn(),
loadUserProfile: vi.fn(),
authenticated: false,
tokenParsed: mockParsedToken
}
}))
But I still get this error Failed to initialize Keycloak adapter: clientId missing Can anyone point me in the right direction?
2 Replies
polarkarate
polarkarate2w ago
Sorry to necro this but did you ever find a solution? Thanks
dwol
dwolOP2w ago
yeah mocking 'useNuxtApp' seemed to do the trick
const mockLogin = vi.fn()

mockNuxtImport('useNuxtApp', () => {
return () => (
{
$keycloak: {
login: mockLogin,
...other properties
}
}
)
})
const mockLogin = vi.fn()

mockNuxtImport('useNuxtApp', () => {
return () => (
{
$keycloak: {
login: mockLogin,
...other properties
}
}
)
})

Did you find this page helpful?