ebt-vue3
Version:
Vue3 Library for SuttaCentral Voice EBT-Sites
89 lines (78 loc) • 2.09 kB
JavaScript
/**
* Test utilities for ebt-vue3
* Provides common mocking functions and setup helpers
*/
/**
* Mock the navigator object for Node.js environment
* @param {string[]} languages - Array of language codes
*/
export const mockNavigator = (languages) => {
// Remove existing navigator if it exists
if (global.navigator) {
delete global.navigator;
}
// Create a new navigator object
Object.defineProperty(global, 'navigator', {
value: { languages },
writable: true,
configurable: true
});
};
/**
* Mock localStorage for Node.js environment
*/
export const mockLocalStorage = () => {
if (global.localStorage) {
return;
}
// Simple localStorage mock
const store = {};
global.localStorage = {
getItem: (key) => store[key] || null,
setItem: (key, value) => { store[key] = value; },
removeItem: (key) => { delete store[key]; },
clear: () => { Object.keys(store).forEach(key => delete store[key]); },
length: 0,
key: (index) => Object.keys(store)[index] || null
};
};
/**
* Mock document object for Node.js environment
*/
export const mockDocument = () => {
if (global.document) {
return;
}
global.document = {
getElementById: () => null,
getElementsByClassName: () => [],
querySelector: () => null,
querySelectorAll: () => [],
createElement: () => ({}),
createTextNode: () => ({}),
};
};
/**
* Mock window object for Node.js environment
*/
export const mockWindow = () => {
if (!global.window) {
global.window = {};
}
// Add localStorage to window if not present
if (!global.window.localStorage && global.localStorage) {
global.window.localStorage = global.localStorage;
}
};
/**
* Setup common test environment
* @param {object} options - Configuration options
* @param {string[]} options.navigatorLanguages - Languages for navigator mock
*/
export const setupTestEnvironment = (options = {}) => {
const { navigatorLanguages = ['en-US'] } = options;
mockNavigator(navigatorLanguages);
mockLocalStorage();
mockDocument();
mockWindow();
};