设置文件中的 vitest 全局变量

Har*_*rry 7 javascript vitest

如何让设置文件中定义的变量在测试文件中起作用?

设置文件:

var lol = 'lol'
Run Code Online (Sandbox Code Playgroud)

测试:

describe("test", () => {
  it("test lol", () => {
    expect(lol).toBe("lol");
  });
});
Run Code Online (Sandbox Code Playgroud)

这不能按预期工作。然而

window.lol = 'lol'
Run Code Online (Sandbox Code Playgroud)

这有效。有没有办法让以前的版本工作或自动将所有全局变量设置为窗口的属性?

Ash*_*erg 9

如果您查看 vitetest 测试套件:

https://github.com/vitest-dev/vitest/tree/main/test/global-setup

您将看到一个示例,其中他们setupFilestest配置中使用 来专门附加值global(特别是使用beforeAll挂钩);请注意,每个测试套件都使用自己的上下文,这就是这样做的原因(而不是通过globalSetup配置字段)。

例如添加lol

// vite.config.js
export default defineConfig({
  test: {
    // ...
    setupFiles: ['./src/utils/setup-teardown-hooks.js'],
    // ...
  },
});
Run Code Online (Sandbox Code Playgroud)

进而:

// setup-teardown-hook.js
import { afterAll, beforeAll } from 'vitest';
beforeAll(() => {
  global.lol = '';
});
afterAll(() => {
  delete global.lol
});
Run Code Online (Sandbox Code Playgroud)

编辑:看起来您也可以populateGlobal通过Vitest - Custom Environment使用实用程序功能:

Vitest 还提供了 populateGlobal 实用函数,可用于将属性从对象移动到全局命名空间中: