vitest crypto.randomUUID() 不是函数

Lun*_*Lun 8 javascript testing node.js svelte vitest

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;
Run Code Online (Sandbox Code Playgroud)

src/setupTests.ts

import '@testing-library/jest-dom/extend-expect';
Run Code Online (Sandbox Code Playgroud)

MyComponent.svelte

onMount(() => {
    postElementId = crypto.randomUUID();
    ...
});
Run Code Online (Sandbox Code Playgroud)

错误

TypeError: crypto.randomUUID is not a function
Run Code Online (Sandbox Code Playgroud)

我有一个使用加密 api 创建随机 id 并按预期工作的组件,但是当我想测试它时,每次我执行此操作时都会弹出此错误,非常感谢任何帮助!

Pre*_*vić 6

我的 vitest 错误是window.crypto.randomUUID() is not a function

所以,我添加setupFiles到 vite.config.js

test: {
    setupFiles: [
        './test/_setup/globalSetup.js'
    ],
...
Run Code Online (Sandbox Code Playgroud)

然后,在globalSetup.js文件中我添加了这两行:

import {randomUUID} from 'node:crypto';
window.crypto.randomUUID = randomUUID;
Run Code Online (Sandbox Code Playgroud)

它似乎已经成功了。