2017-02-06 15 views
0

JASMINEとtestdouble.jsをモッキングライブラリとして使用して、JSアプリケーションのテストを作成しています。私はモジュールでコードを整理するためにAMDフォーマットを使用しており、モジュール・ローダーとしてRequreJSを使用しています。私は、testdouble.jsを使用して、AMDフォーマットでテストされているモジュールの依存関係を置き換えて、RequireJS経由でロードする方法を知りました。ドキュメントはこれについて不明である、または私は何かが欠けているので、誰かが正しい方向に私を指すことができる場合。AMDモジュール形式の依存関係をtestdouble.jsに置き換えます。

私は自分のセットアップと私が直面している問題を説明する例を投稿します。

car.js

define("car", ["engine"], function(engine) { 
    function drive = { 
    engine.run(); 
    } 

    return { 
    drive: drive 
    } 
}); 

engine.js

define("engine", function() { 
    function run() { 
    console.log("Engine running!"); 
    } 

    return { 
    run: run 
    } 
}); 

car.spec.js

define(["car"], function(car) { 
    describe("Car", function() { 
    it("should run the motor when driving", function() { 
     // I am not sure how to mock the engine's object run method 
     // and where to place that logic, in beforeEach or... 
     td.replace(engine, "run"); 
     car.drive(); 
     // How to verify that when car.run() has executed, it calls this mocked method 
     td.verify(engine.run()); 
    }); 
    }); 
}); 

答えて

1

testdouble.jsは、AMDモジュールの明示的なサポートしていません。唯一のモジュール関連のトリックは、Node.js固有であり、ノードのCJSモジュールローダーの上に構築されています。

この場合、テストではengineへの参照が必要で、runプロパティを置き換えてください(あなたの例は不完全です)。

afterEachtd.reset()を実行して元のプロパティを置き換えることを忘れないでください。

関連する問題