类型错误:使用 Threejs 和 jest 时无法读取未定义的属性'getShaderPrecisionFormat'



我对这个q中的所有技术都很了解,所以请原谅我

接着这个问题:用Jest对一个ThreeJS应用程序进行单元测试

我已经在答案中实现了解决方案,因此创建了这个函数来模拟viewport:

export function createViewPort () {
const canvasGL = new Canvas.Canvas(1000, 1000)
canvasGL.addEventListener = function (event, func, bind_) {
// mock function to avoid errors inside THREE.WebGlRenderer()
}
const glContext = gl(1, 1)
const renderer = new THREE.WebGLRenderer({ context: glContext, antialias: true, canvas: canvasGL })
var mvp = new BaseViewPort()
mvp.initialise(1000, 1000, renderer)
return mvp
}

BaseViewPort是我的类,它创建一个相机和一个场景。

然后我在我的jest测试中使用它,在我的本地机器(windows pc)上运行良好。当我把它推到git仓库,然后构建在linux服务器上运行时,我得到下面的错误:

TypeError: Cannot read property 'getShaderPrecisionFormat' of undefined

我不知道从哪里开始寻找可能导致这种情况的原因。显然,这两种环境之间存在一些差异。你知道我该从哪开始找吗?我应该用笑话吗?嘲笑这样做?

答案是设置用于运行测试的虚拟机没有配置为具有显卡,而webgl渲染器需要显卡才能工作。此外,我试图做的是更多的集成测试,而不是单元测试,所以改变我的代码结构,这样我就不需要加载三个ejs,可以更干净地模拟视口。

最新更新