2016-10-04 48 views
0

我想爲nodeJS單元測試使用sinonJS框架。問題是,我根本無法讓這些sin sp的間諜工作。這是我的代碼:sinon間諜沒有檢測到函數調用

const callback = sinon.spy(someModule.callback) 

mainModule.doSomethingFunction() //someModule.callback function is called inside this function 

assert(callback.calledOnce, 'callback should be called once') 

它只是失敗:

AssertionError: callback should be called once

但我記錄應該調用的函數裏面,它清楚地表明它被調用,興農間諜剛沒有檢測到它。我不知道什麼是錯的?

+1

如果您在問題中包含的是所有待測試的代碼,則不會調用它。你創造了間諜,然後不做任何事情。 – cartant

+0

我編輯了這個問題:我在應該被窺探的回調中添加了函數。間諜是不是間諜的目的,而不是做什麼?我認爲間諜只是間諜,然後我可以測試它偵察到的功能是否已被調用? –

+0

@ VilleMiekk-oja是的,但是你的代碼中沒有任何函數調用'callback'。也許它應該作爲'doSomethingFunction'的參數傳遞? – Bergi

回答

2

要在間諜包裝一個對象的方法,你可以使用sinon這樣的:

const callback = sinon.spy(someModule, 'callback'); 
mainModule.doSomethingFunction(); 
assert(callback.calledOnce, 'callback should be called once'); 
callback.restore(); 

請注意,你應該叫restore當您完成解開間諜。

+0

不工作= /。它只是沒有檢測到回調,即使我完全像你這樣寫它 –

+0

它對我在一些節點流的單元測試中工作正常。文檔是[here](http://sinonjs.org/docs/#sinonspy)。如果你無法使用它,你需要在你的問題中包含[mcve],因爲你的問題只包含很少的代碼。 – cartant

+0

一個區別是,我們使用ASI和節點。自動分號插入。也許這會影響sinon,因此它不會檢測函數調用? –

1

聲明const callback = sinon.spy(someModule.callback)創建一個間諜,一旦它被調用,它將調用someModule.callback(順便說一句,它不是一個常量),但它並不取代someModule.callback函數。若要替換此功能,請使用someModule.callback = sinon.spy(someModule.callback)

+0

請參閱我有關該主題的新問題:http://stackoverflow.com/questions/39868119/how-to-sinon-spy-module-export-utility-functions,你可能能夠解決這個問題 –