JavaScript adapter that does not request data in Keycloak.
It can be used to launch a frontend application without a Keycloak in docker or for testing.
npm install -D keycloak-js-mock
KeycloakMock returns an identical instance. The library generates a token without the help of Keycloak based on the received profile (by default, all the necessary data is already written).
To start the application without connecting to KK:
import Keycloak from 'keycloak-js';
import { KeycloakMock, customize } from 'keycloak-js-mock';
const keycloakInit = (mocked: boolean): Keycloak => {
if (mocked) {
customize.profile({
username: 'myUserName',
});
return new KeycloakMock();
}
return new Keycloak({
url: REACT_APP_KEYCLOAK_URL,
realm: KEYCLOAK_REALM_NAME,
clientId: KEYCLOAK_CLIENT_ID,
});
};
const keycloak = keycloakInit(true);
await keycloak.init({ pkceMethod: 'S256', onLoad: 'login-required' }).then(() => {
keycloak.authenticated // true
keycloak.token // eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldU...
keycloak.tokenParsed // { username: 'myUserName', email: 'j.snow@google.com', ... }
});
For jest testing:
/**
* To run using @testing-library/jest-dom
* @jest-environment node
*/
import Keycloak, { KeycloakConfig } from 'keycloak-js';
import { customize, KeycloakMock as mockKeycloak } from 'keycloak-js-mock';
jest.mock('keycloak-js', () => {
return jest.fn().mockImplementation((config?: KeycloakConfig | string) => {
return new mockKeycloak(config);
});
});
describe('KeycloakMock:', () => {
const username = 'myTestUserName';
let keycloak: Keycloak;
beforeAll(() => {
customize.profile({
username,
});
keycloak = new Keycloak();
});
afterAll(() => {
// In order to complete the test, do not forget to logout
keycloak.logout();
});
test('init', async () => {
await keycloak.init({}).then((authenticated) => {
expect(authenticated).toBe(true);
expect(keycloak.tokenParsed!.username).toBe(username);
});
});
});
Copyright © 2024 Bystrova Ann.
This project is MIT licensed.
Bystrova Ann - ann.bystrova96@mail.ru
Project Link: https://github.com/Ann2827/keycloak-js-mock