我正在开发一个基于网络的 3D 游戏。我用TypeScript完全设置了我的项目。
我使用Angular设置了所有路由,并且我使用Three.js作为我的 3D 引擎。
最后,我有Mocha + Chai组合来使用名为typescript-require的特定插件来测试我的 TypeScript 。
我使用Systemjs作为我的JSPM包的导入器。
所以要设置阶段:(
出于示例目的,文件被剥离)
Systemjs/JSPM 文件:jspmconfig.js
System.config({
...
paths: {
...
"github:*": "jspm_packages/github/*"
...
},
map: {
...
"three.js": "github:mrdoob/three.js@master"
...
}
});
节点文件:package.json
...
"scripts": {
"test": "mocha --compilers ts:typescript-require ./source/**/*.spec.ts"
},
...
控制器文件QuestDetailCtrl.ts
::
/// <reference path="../../../../../typings/tsd.d.ts" />
// Controller | Dashboard
export default class QuestDetailCtrl {
...
// Constructor
constructor() { ... }
renderer: THREE.WebGLRenderer = new THREE.WebGLRenderer(); // <-- This line uses a THREE instance.
}
注意 在我的应用程序中早一点的地方我已经导入了 Three.js,因此它在我的控制器中可用(这也可以正确编译为 ES5 并在浏览器中工作)。
摩卡测试文件QuestDetailCtrl.spec.ts
/// <reference path="../../../../../typings/tsd.d.ts" />
// Imports
import { assert, expect } from 'chai';
import QuestDetailCtrl from './QuestDetailCtrl';
// Describe
describe('QuestDetailCtrl', function() {
// Shoulds
it('should exist', () => {
expect(QuestDetailCtrl).to.exist; // <-- WORKS
});
it('should initialize', () => {
let instance = new QuestDetailCtrl(); // <-- DOES NOT WORK
});
});
在最后一个文件QuestDetailCtrl.spec.ts
中,我初始化了我的控制器(TypeScript 类)的一个新实例。
因为 Mocha 不知道 Three.js,所以这个测试在初始化我的控制器实例时失败了。
所以我的问题变成了:
我将如何在我的测试中模拟/导入 Three.js(或任何其他第三方库),以便 Mocha 知道它并能够测试/初始化它?
我想当我开始测试时,类似的情况也适用于 Angular,因此非常感谢您提供解决方案!
我已经遇到了解决方案,可以将数据import System from 'systemjs'
设置meta
到three.js
库中进行设置global
系统的变量,但我无法让它工作。
谢谢!