テスト環境 
Vitestにはenvironmentオプションがあり、特定の環境内でコードを実行できます。environmentOptionsオプションを使用して、環境の動作を変更できます。
既定では、次の環境を使用できます
- nodeは既定の環境です
- jsdomは- jsdomパッケージを使用して、ブラウザAPIを提供することでブラウザ環境をエミュレートします
- happy-domは- happy-domパッケージを使用して、ブラウザAPIを提供することでブラウザ環境をエミュレートします。jsdomよりも高速とされていますが、一部のAPIがありません
- edge-runtimeはedge-runtimeをエミュレートし、- @edge-runtime/vmパッケージを使用します
特定のファイルの環境 
コンフィグでenvironmentオプションを設定すると、プロジェクト内のすべてのテストファイルに適用されます。さらにきめ細やかに制御するには、特定のファイルの環境を指定するための制御コメントを使用できます。制御コメントは@vitest-environmentで始まり、環境名が続くコメントです。
// @vitest-environment jsdom
import { ,  } from 'vitest'
('test', () => {
  (typeof )..('undefined')
})また、environmentMatchGlobsオプションを設定して、globパターンに基づいて環境を指定することもできます。
カスタム環境 
0.23.0以降、独自のパッケージを作成してVitest環境を拡張できます。これを行うには、vitest-environment-${name}という名前のパッケージを作成するか、有効なJS/TSファイルへのパスを指定します(0.34.0以降でサポートされています)。そのパッケージはEnvironmentの形をしたオブジェクトをエクスポートする必要があります。
import type { Environment } from 'vitest'
export default <Environment>{
  : 'custom',
  : 'ssr',
  // optional - only if you support "experimental-vm" pool
  async () {
    const  = await import('node:vm')
    const  = .()
    return {
      () {
        return 
      },
      () {
        // called after all tests with this env have been run
      }
    }
  },
  () {
    // custom setup
    return {
      () {
        // called after all tests with this env have been run
      }
    }
  }
}警告
0.34.0以降、Vitestは環境オブジェクトにtransformModeオプションを必要とします。これはssrまたはwebと等しくする必要があります。この値は、プラグインがソースコードを変換または解決するときに、どのようにプラグインを変換するのかを決定します。ssrに設定すると、プラグインのフックはファイルを変換または解決するときにssr: trueを受け取ります。それ以外の場合は、ssrはfalseに設定されます。
vitest/environmentsエントリを使用して、既定のVitest環境にアクセスすることもできます
import { ,  } from 'vitest/environments'
.() // { jsdom, happy-dom, node, edge-runtime }Vitestには、オブジェクトからグローバル名前空間にプロパティを移動するために使用できるpopulateGlobalユーティリティ関数も用意されています
interface PopulateOptions {
  // should non-class functions be bind to the global namespace
  bindFunctions?: boolean
}
interface PopulateResult {
  // a list of all keys that were copied, even if value doesn't exist on original object
  keys: Set<string>
  // a map of original object that might have been overridden with keys
  // you can return these values inside `teardown` function
  originals: Map<string | symbol, any>
}
export function populateGlobal(global: any, original: any, options: PopulateOptions): PopulateResult