2017-02-07 9 views
0

サービスに次のコードがあります。Jasmine匿名関数を返す関数をテストする方法

function getK(k) { 
     return function() { 
      return k; 
     }; 
    } 

私はgetKが私の質問は、私はジャスミン

EDIT

で、内側

return function() { 
    return k; 
} 

のテストはどうすればよいです

beforeEach(inject(function(FiltersService){ 
    this.service = FiltersService; 
    spyOn(this.service, 'getK'); 
})); 

it("getK should be called", function(){ 
    var key = "TEST"; 
    var result = this.service.getK(key); 
    expect(this.service.getK).toHaveBeenCalled(); 
    expect(this.service.getK).toHaveBeenCalledWith("TEST"); 
} 

で呼び出されたことをテストすることができます

詳細を指定するには、getK functionを使用して、以下のようにオブジェクトを埋めます。そのオブジェクトは、私が使用しているライブラリの一部で、keyを使用しています。 keyの実際の実装が私が制御していないライブラリの一部であることを見て、カルマ - ジャスミンの観点からこれをテストする方法についてちょっと混乱していると思います。だから私は、内部getK機能のテストを作成する方法を確認していない、あるいはvalid以下の機能のために必ずオブジェクトが正しく

libObject.push({ 
    Data: { 
    Name: 'test' 
      }, 
    key: getK("TEST"), 
    valid: function() { 
    return true; 
} 
}); 
+0

正確に何をテストしますか? – estus

+0

私は本当にテストすることができます。それは私がgetKに送ったものを返すということです...正直なところ、コードカバレッジを得るには – user2719805

+0

'expect(result).toEqual(jasmine.any(Function))'です。あなたはこの関数のコンテキストに関する詳細を提供していないので、他のことを言うことはできません。そして私はgetKが呼ばれたというテストがなぜ必要なのか分からない。 'getK(key)'を呼び出したのはあなたでした。もちろん、それはもちろん、 'TEST'と呼ばれるでしょう。 – estus

答えて

3

記入されなければユニットテストは完全なカバレッジのための線でコード行をテスト想定します。

getKFiltersService方法として公開されていることを考えると、それはスパイするために何もないので、この仕様でスパイの必要は、ありません

expect(this.service.getK).toEqual(jasmine.any(Function)); 

var key = {}; 
var result = this.service.getK(key); 

expect(result).toEqual(jasmine.any(Function)); 
expect(result()).toBe(key); 

です。親関数の呼び出しは関数を返すので、親関数を呼び出す

2

、とすぐに親によって返された匿名関数を呼び出す:これは非常に簡単です、あなたのために完璧に動作するはず

expect(service.getK(k)()).toEqual(k); 

を。