2016-08-23 17 views
0

私はMeteorアプリケーションをテストするためにmochaとchaiを使い、ドキュメントオブジェクトを使用するモジュールを持っています。このテストはサーバー上で実行されており、もちろん「ドキュメントは定義されていません」というトリガーになります。ドキュメントオブジェクトを模擬したり、ドキュメントを使用するモジュールでテストを実行したりする良い方法はありますか?Meteor Appでテストするための "ドキュメント"オブジェクトを模擬する方法は?

私はjsdom、jsdomifyなどを試しています。また、メテオガイドのテストセクションに従って統合テストとフルアプリケーションテストを試みましたが、スタックしてしまいました。

流星のjsdomのようなパッケージを使用する場合の提案や例は、非常に高く評価されます。

EDIT - を追加しました例

は、ここで私は何をしようとしているのは非常に小さな例です。 PhaserJSを追加せずにエラーをトリガーするように、私はそれを細断しました。しかし、Pixiとp2が必要なPhaserJSを使用するプロジェクトであるため、Pixi/p2/Phaserがそのドキュメントで行う必要があることをすべて伝えるのは少し難しいです。

/test/game.test.js

import { chai } from 'meteor/practicalmeteor:chai'; 
import {Game} from '/imports/game.js'; 

var assert = chai.assert; 

if(Meteor.isClient){ 
    describe('Game', function() { 
     it('can add 2 + 3 and return 5 with addNumbers function.', function() { 
      //arrange 
      var game = new Game(); 

      //act 
      var result = game.addNumbers(2,3); 

      //assert 
      assert.equal(result, 5); 
     }); 
    }); 
} 

/imports/docChanger.js

//simulates pixi 
(function(){ 
    var docChanger = {}; 
    docChanger.canvas = document.createElement('canvas'); 
    return docChanger; 
}).call(this); 

/imports/game.js

import docChanger from '/imports/docChanger.js'; 

export class Game { 
    constructor(){ 
     this.docChanger = docChanger; 
    } 

    addNumbers(x,y){ 
     return x+y; 
    } 
} 

私は流星1.4.1を使用していて、次のパッケージ使用しています:

  • practicalmeteor:モカ

  • practicalmeteorを:あなたが唯一のクライアントでテストを実行するので

+0

'document'の使い方のサンプルコードを投稿できますか?答えの種類は、それを変更したり、プロパティにアクセスしたり、関数を呼び出すかどうか、クライアント固有のコードがどのようになっているかによって異なります。 – Waiski

+0

@Waiskiはコメントをいただきありがとうございます。私は小さな例を追加しました。私が使用しているPhaserJS/pixi/p2モジュールには多くのコード行があるため、ドキュメントが使用されているすべての方法がわかりません。しかし、上記の例は最も基本的な方法でエラーを引き起こします。私が使っているモジュールのコードへのリンクは、pixi.js、p2.js、phaser.jsです:https://github.com/photonstorm/phaser/tree/master/build – mkimmet

答えて

1

チャイとにかく(サーバー上で実行する理由はありません)、問題のあるコンポーネントをテストファイルに条件付きで要求するだけです:

Meteor 1.3.3以降、ネストされたインポートステートメントもサポートされています(if (Meteor.isClient) { import {Game} from '/imports/game.js'; ...など)。しかし、eslintで問題が発生するため、これは推奨しません。

あなたは本当に、本当には、グローバル名前空間でそれを作成し、このようにそのメソッドを模擬でき、サーバー側のテストでdocumentを使用するコードを実行する必要がある場合:

if (Meteor.isServer) { 
    GLOBAL.document = { createElement:() => {} }; 
} 

これができるようになりますdocument.createElement()をエラーなしで呼び出すことができます。とにかくクライアント上でdocumentを使用するコードが実行されるので、これは役に立ちそうな状況を考えることはできません。また、クライアントでのみテストするだけで十分です。

+0

ありがとう@Waiskiはちょうど私が物事をクリックし、私が作ったいくつかの間違いを認識するために必要なもの。 – mkimmet

関連する問題