2016-11-18 73 views
0

我想檢查函數是否在我的測試中被調用過。試圖執行此操作時收到錯誤TypeError: Cannot read property 'match' of undefined。我已經將我的代碼設置爲在我的函數上使用sinon.spy(),然後在此基礎上檢查callCountgetMarketLabel總是返回一個字符串。下面是我的代碼:sinon spy檢查函數是否被調用錯誤

beforeEach(() => { 
    marketLabelSpy = sinon.spy(getMarketLabel()); 
}); //please note this is in a describe block but didnt feel it was relevant to post it. marketLabelSpy is pre-defined. 

it('should be called',() => { 
    expect(marketLabelSpy).to.have.callCount(1); 
}) 
+0

是什麼getMarketLabel()返回?要附加一個sinon間諜,你需要做sinon.spy(func)或sinon.spy(object,「method」)或者使用sinon.spy()作爲函數本身。 – DevDig

+0

編輯原文。 'getMarketLabel'將總是返回一個'字符串' – DaveDavidson

+0

我不認爲這是有道理的,請參閱如何使用sinon spies:http://sinonjs.org/docs/#spies,沒有sinon.spy方法將字符串。 – DevDig

回答

1

在代碼中,您呼叫的getMarketLabel函數和函數調用的結果(這是一個字符串)將被用來建立你的間諜。這不符合你的意圖。

爲了使用上的功能的興農間諜簡單地傳遞給函數的引用:

beforeEach(() => { 
    marketLabelSpy = sinon.spy(getMarketLabel); 
}); 
+0

好吧,這是更接近一步,但測試不通過,因爲它已被稱爲0次。要調用它,我需要傳遞一個字符串函數。 – DaveDavidson

+0

'getMarketLabel();期望(marketLabelSpy).to.have.callCount(1);' – DevDig

+0

@DevDig即不調用間諜,但原來的功能。 – robertklep