Search code examples
javascriptnode.jstestingsveltevitest

vitest crypto.randomUUID() is not a function


vite.config.ts

import { sveltekit } from '@sveltejs/kit/vite';

const config = {
    plugins: [sveltekit()],
    test: {
        include: ['**/*.spec.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
        environment: 'jsdom',
        globals: true,
        setupFiles: 'src/setupTests.ts'
    }
};

export default config;

src/setupTests.ts

import '@testing-library/jest-dom/extend-expect';

MyComponent.svelte

onMount(() => {
    postElementId = crypto.randomUUID();
    ...
});

Error

TypeError: crypto.randomUUID is not a function

I've got a component that uses the crypto api to create a random id and works as intended, but when I want to test it, everytime I do this error pops up, any help is appreciated!


Solution

  • My vitest error was window.crypto.randomUUID() is not a function.

    So, I added setupFiles to vite.config.js

    test: {
        setupFiles: [
            './test/_setup/globalSetup.js'
        ],
    ...
    

    Then, in globalSetup.js file I added these 2 lines:

    import {randomUUID} from 'node:crypto';
    window.crypto.randomUUID = randomUUID;
    

    And it seems to have done the trick.