私は Web ベースの 3D ゲームに取り組んでいます。私のプロジェクトはTypeScriptで完全にセットアップされています。
Angularを使用してすべてのルーティングをセットアップし、 Three.jsを 3D エンジンとして使用しています。
最後に、typescript-requireという特定のプラグインを使用して TypeScript をテストするためのMocha + Chaiコンボがあります。
JSPMパッケージのインポーターとしてSystemjsを使用しています。
ステージを設定するには:(
ファイルは例のために削除されています)
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 を認識していないため、このテストはコントローラーのインスタンスの初期化に失敗します。
だから私の質問は次のようになります:
Mocha がそれを認識してテスト/初期化できるように、テスト内で Three.js (または他のサードパーティのライブラリ) をモック/インポートするにはどうすればよいですか?
これをテストし始めると、同様の状況がAngularにも当てはまると思いますので、解決策をいただければ幸いです!
私はすでに、ライブラリにデータをimport System from 'systemjs'
設定してシステムの変数を設定するソリューションにぶつかりましたが、それを機能させることができませんでした。meta
three.js
global
ありがとう!