错误:创建 WebGL 上下文时出错 - Jasmine-spie

问题描述 投票:0回答:1

我正在为实例化类 new THREE.WebGLRenderer' 并抛出错误的方法之一编写单元测试:创建 WebGL 上下文时出错`

public init(element: HTMLElement) { 
  this.renderer = new THREE.WebGLRenderer({antialias: true}); 
}

所以我决定模拟 THREE.WebGLRenderer 为

jasmine.createSpy('THREE.WebGLRenderer').and.returnValue(mockRenderer); 

但是当我调用 init 方法时,它再次实例化新的 THREE.WebGLRenderer 并抛出相同的错误。

有人请建议修复错误或帮助我模拟它。

javascript angular three.js karma-jasmine
1个回答
0
投票

您似乎在尝试使用 Jasmine 模拟

THREE.WebGLRenderer
构造函数,但真正的构造函数仍在您的
init
方法中被调用,从而导致错误。您需要创建一个模拟渲染器对象,并使用 Jasmine 的
spyOn
将原始的
THREE.WebGLRenderer
构造函数替换为返回模拟对象的间谍。

// Create a mock renderer object
const mockRenderer = {
  // Add methods or properties you want to mock
};

// Replace the THREE.WebGLRenderer constructor with a spy
spyOn(THREE, 'WebGLRenderer').and.returnValue(mockRenderer);

现在,更新你的测试用例:

describe('YourComponent', () => {
  let yourComponent;

  beforeEach(() => {
    const mockRenderer = {}; // Mock renderer
    spyOn(THREE, 'WebGLRenderer').and.returnValue(mockRenderer);
    yourComponent = new YourComponent();
  });

  it('should call THREE.WebGLRenderer with correct options', () => {
    const element = document.createElement('div');
    yourComponent.init(element);
    expect(THREE.WebGLRenderer).toHaveBeenCalledWith({ antialias: true });
  });
});

这应该可以解决错误并允许您测试您的

init
方法。

© www.soinside.com 2019 - 2024. All rights reserved.