2017-10-20 6 views
0

CommonJSファイルのreturn文をカバーするテストを追加しようとしています。module1.js、添付の画像を参照してください。karma-jasmine - 戻り値オブジェクトをテストする方法

describe("Module 1 ",() => { 
    let mod, testMod = null; 

    beforeEach(() => { 
     mod = { 
      module1: require('../src/app/js/module1/module1') 
     }; 

     spyOn(mod, 'module1'); 
     testMod = mod.module1(); 
     console.log(testMod); 
     console.log(mod.module1); 
    }); 
    it('is executed',() => { 
     expect(mod.module1).toHaveBeenCalled(); 
    }); 
}); 

Module1のファイル:

/** 
* Represents module1. 
* @module module1 
*/ 

function module1() { 
    let x = 13; 

    return { 
     getUserAgent: getUserAgent 
    }; 

    /** 
    * Return the userAgent of the browser. 
    * @func getUserAgent 
    */ 
    function getUserAgent() { 
     return window.navigator.userAgent 
    } 
} 

module.exports = module1; 

ログ出力:

LOG: undefined 
LOG: function() { ... } 

UPDATE:私はmod.module.toStringを記録し、コンソールログを:ここで

は、私は現在しようとしているものです

function() { return fn.apply(this, arguments); }

なぜ私のモジュールはありませんか?

私はここに正しいアプローチを試みていますか? mod.module1();はなぜ機能しないのですか?

Istanbul coverage Report

答えて

0

あなたはジャスミンでオブジェクトのメソッドにスパイを設定すると、元の関数が呼び出されません。 あなたの例では、mod.module1()は実際のモジュール関数を呼び出しますが、スパイラッパー関数のみを呼び出します。実際の関数はまったく呼び出されません。
あなたは、元の関数が呼び出されるようにしたい場合は、and.callThroughを使用する必要があります。

spyOn(mod, 'module1').and.callThrough(); 
関連する問題