2016-04-30 30 views
0

如果單元測試代碼嚴重屬於外部庫,並且在它的每個方法內調用某個外部庫函數,那麼該如何進行單元測試。 如果所有事情都是模擬的,而不是像伊斯坦布爾這樣的代碼覆蓋範圍,那麼這些行就不會被嘲笑。誰擁有涉及外部依賴和圖書館的單元測試經驗,最佳實踐是什麼?在Jasmine中使用外部庫進行單元測試

例如,我們有2個內部函數和3個外部庫函數。 如果嘲笑那些外部的,比伊斯坦布爾不包括那些線路。

function internalFoo1(input) { 
var result = internalFoo2(input*2); 
var finalResult = externalLibraryBar1(result); 
return result; 
}; 

function internalFoo2(value) { 
    var operation = externalLibraryBar2(value*2); 
    var response = externalLibraryBar3(operation); 
    return response; 
} 

如何寫爲internalFoo1測試(),因此單元測試將涵蓋其所有行代碼,以及internalFoo2()之一。

回答

0

理想情況下,你不應該測試外部庫,這不是你的工作。

在這種情況下,您可以使用間諜並查看該庫是否已被調用。 http://jasmine.github.io/2.2/introduction.html#section-Spies

例如取自茉莉花文件:

describe("A spy, when configured with an alternate implementation", function() { 
    var foo, bar, fetchedBar; 

    beforeEach(function() { 
    foo = { 
     setBar: function(value) { 
     bar = value; 
     }, 
     getBar: function() { 
     return bar; 
     } 
    }; 

    spyOn(foo, "getBar").and.callFake(function() { 
     return 1001; 
    }); 

    foo.setBar(123); 
    fetchedBar = foo.getBar(); 
    }); 

    it("tracks that the spy was called", function() { 
    expect(foo.getBar).toHaveBeenCalled(); 
    }); 

    it("should not affect other functions", function() { 
    expect(bar).toEqual(123); 
    }); 

    it("when called returns the requested value", function() { 
    expect(fetchedBar).toEqual(1001); 
    }); 
}); 
相關問題