TestModule
TestModule
类代表单个项目中的测试模块。该类仅在主线程中可用。如果您正在处理运行时任务,请参阅"Runner API"。
TestModule
实例始终具有 type
属性,其值为 module
。这可用于区分不同的任务类型:
ts
if (task.type === 'module') {
task; // TestModule
}
扩展测试套件方法
TestModule
类继承了 TestSuite
中的所有方法和属性。本指南仅列出 TestModule
独有的方法和属性。
moduleId
这通常是一个绝对的 Unix 文件路径(即使在 Windows 上也是如此)。如果文件不在磁盘上,它可能是一个虚拟 ID。此值对应于 Vite 的 ModuleGraph
ID。
ts
'C:/Users/Documents/project/example.test.ts'; // ✅
'/Users/mac/project/example.test.ts'; // ✅
'C:\\Users\\Documents\\project\\example.test.ts'; // ❌
state
ts
function state(): TestModuleState;
其工作方式与 testSuite.state()
相同,但如果模块尚未执行,还可以返回 queued
。
meta 3.1.0+
ts
function meta(): TaskMeta;
在模块执行或收集期间附加的自定义元数据。元数据可通过在测试运行时向 task.meta
对象添加属性来附加:
ts
import { test } from 'vitest';
describe('the validation works correctly', task => {
// 在收集期间赋值 "decorated"
task.file.meta.decorated = false;
test('some test', ({ task }) => {
// 在测试运行期间赋值 "decorated",它将仅在 onTestCaseReady 钩子中可用
task.file.meta.decorated = false;
});
});
TIP
如果元数据是在收集期间(在 test
函数之外)附加的,那么它将在自定义报告器中的 onTestModuleCollected
钩子中可用。
diagnostic
ts
function diagnostic(): ModuleDiagnostic;
提供有关模块的有用信息,例如持续时间和内存使用情况等。若模块尚未执行,则所有诊断值都将返回 0
。
ts
interface ModuleDiagnostic {
/**
* 导入和初始化环境所需的时间。
*/
readonly environmentSetupDuration: number;
/**
* Vitest 设置测试工具(运行器、模拟等)所需的时间。
*/
readonly prepareDuration: number;
/**
* 导入测试模块所需的时间。
* 这包括导入模块中的所有内容并执行套件回调。
*/
readonly collectDuration: number;
/**
* 导入设置模块所需的时间。
*/
readonly setupDuration: number;
/**
* 模块中所有测试和钩子的累计持续时间。
*/
readonly duration: number;
/**
* 模块使用的内存量(以字节为单位)。
* 此值仅在测试使用 `logHeapUsage` 标志执行时可用。
*/
readonly heap: number | undefined;
/**
* Vitest 处理的每个非外部化依赖项的导入时间。
*/
readonly importDurations: Record<string, ImportDuration>;
}
/** 导入和执行非外部化文件所花费的时间。 */
interface ImportDuration {
/** 导入和执行文件本身所花费的时间,不包括文件所做的所有非外部化导入。 */
selfTime: number;
/** 导入和执行文件及其所有导入所花费的总时间。 */
totalTime: number;
}