2

私は 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'設定してシステムの変数を設定するソリューションにぶつかりましたが、それを機能させることができませんでした。metathree.jsglobal

ありがとう!

4

2 に答える 2

2

テストスイートでベンダーの依存関係のインスタンスを作成しないでください。また、テスト済みのクラスの依存関係のインスタンスを作成して、たとえばsinonjsを使用してそれをモックするべきではありません。

ここに私のがあります。複雑なテストスイートはありませんが、単純なものだけです(すぐにもっと複雑なものを追加してみます)が、Mocha & Chai & sinon + TypeScript + SystemJS + JSPM + Angular + ... :)

于 2015-10-10T16:19:55.997 に答える