Mock postprocessing passes and effects for testing.

This commit is contained in:
2026-04-26 05:35:36 +02:00
parent 04f136b3a7
commit a7b6dd745f

View File

@@ -2,6 +2,7 @@ import {
BoxGeometry, BoxGeometry,
Group, Group,
Mesh, Mesh,
MeshBasicMaterial,
MeshStandardMaterial, MeshStandardMaterial,
PerspectiveCamera, PerspectiveCamera,
Scene, Scene,
@@ -17,6 +18,15 @@ const postprocessingState = vi.hoisted(() => ({
})); }));
vi.mock("postprocessing", () => { vi.mock("postprocessing", () => {
class MockPass {
name: string;
needsSwap = true;
constructor(name = "Pass") {
this.name = name;
}
}
class MockEffectComposer { class MockEffectComposer {
constructor(_renderer: unknown, options: Record<string, unknown>) { constructor(_renderer: unknown, options: Record<string, unknown>) {
postprocessingState.composerOptions.push(options); postprocessingState.composerOptions.push(options);
@@ -27,24 +37,51 @@ vi.mock("postprocessing", () => {
} }
} }
class MockRenderPass { class MockRenderPass extends MockPass {
constructor(_scene: unknown, _camera: unknown) {} clear = true;
ignoreBackground = false;
skipShadowMapUpdate = false;
constructor(
readonly scene: unknown,
readonly camera: unknown,
readonly overrideMaterial: unknown = null
) {
super("RenderPass");
}
render() {}
} }
class MockNormalPass { class MockNormalPass extends MockPass {
texture: Record<string, unknown>; texture: Record<string, unknown>;
constructor(_scene: unknown, _camera: unknown) { constructor(_scene: unknown, _camera: unknown) {
super("NormalPass");
this.texture = { this.texture = {
kind: "normal-pass-texture", kind: "normal-pass-texture",
index: postprocessingState.normalPassTextures.length index: postprocessingState.normalPassTextures.length
}; };
postprocessingState.normalPassTextures.push(this.texture); postprocessingState.normalPassTextures.push(this.texture);
} }
render() {}
} }
class MockEffectPass { class MockEffectPass extends MockPass {
constructor(_camera: unknown, ..._effects: unknown[]) {} constructor(readonly camera: unknown, ...readonly effects: unknown[]) {
super("EffectPass");
}
}
class MockCopyMaterial {
kind = "copy-material";
}
class MockShaderPass extends MockPass {
constructor(readonly material: unknown) {
super("ShaderPass");
}
} }
class MockSSAOEffect { class MockSSAOEffect {
@@ -71,11 +108,14 @@ vi.mock("postprocessing", () => {
return { return {
BloomEffect: MockBloomEffect, BloomEffect: MockBloomEffect,
CopyMaterial: MockCopyMaterial,
DepthOfFieldEffect: MockDepthOfFieldEffect, DepthOfFieldEffect: MockDepthOfFieldEffect,
EffectComposer: MockEffectComposer, EffectComposer: MockEffectComposer,
EffectPass: MockEffectPass, EffectPass: MockEffectPass,
NormalPass: MockNormalPass, NormalPass: MockNormalPass,
Pass: MockPass,
RenderPass: MockRenderPass, RenderPass: MockRenderPass,
ShaderPass: MockShaderPass,
SMAAEffect: MockSMAAEffect, SMAAEffect: MockSMAAEffect,
SMAAPreset: { SMAAPreset: {
MEDIUM: "medium" MEDIUM: "medium"