簡體   English   中英

Sinon在函數中存根函數

[英]Sinon stub a function within a function

我正在工作地點對我們的javascript文件進行測試。 我決定使用Mocha,Chai和Sinon庫來幫助進行測試。 首先,我為不需要太多重構的函數編寫單元測試,並遇到了一個我不太了解的有趣案例。

function getQueries() {
  code that returns queries in an array -> ['one', 'two', 'three']    
}

function sort(col, type) {
  var queries = getQueries();
  some code that sorts these queries
  return sorted array
}

因為我正在對sort函數進行單元測試,所以我想對getQueries()存根以返回虛擬列表。

var queries = ['one', 'two', 'three'];
sinon.stub(getQueries).returns(queries);

上面的代碼沒有工作錯誤msg:

TypeError: Attempted to wrap undefined property undefined as function
at Object.wrapMethod (file://node_modules/sinon/pkg/sinon-1.17.7.js:1359:29)
at Object.stub (file://node_modules/sinon/pkg/sinon-1.17.7.js:3459:26)
at F.stub (file://node_modules/sinon/pkg/sinon-1.17.7.js:4200:44)
at Context.obj.stub (file://node_modules/sinon/pkg/sinon-1.17.7.js:4215:37)
at Context.<anonymous> (unit_tests/unit_test.js:154:10)
at Context.sinonSandboxedTest (file:/node_modules/sinon/pkg/sinon-1.17.7.js:6069:39)

但是,下面的代碼可以正常工作。

var queries = ['one', 'two', 'three'];
getQueries = sinon.stub();
getQueries.returns(queries); 

我不完全理解為什么此代碼有效,而上面的代碼卻無效。 我知道sinon.stub(obj,method,function)的語法,但是getQueries是一個沒有對象的函數。 非常感謝任何見解。

如果getQueries似乎不是對象的一部分,則它是全局對象window ,因此sinon.stub(window, 'getQueries', ...)應該可以解決問題。

在這種情況下,一種可能更好的方法是將getQueries的結果傳遞給sort函數。 在您當前的結構中, sort函數有兩個工作:獲取列表並對其進行排序。 您可能無法命名函數getSortedQueries ,但是實際的關注點分離甚至更好,並且甚至不需要模擬或存根該函數,因為您可以將固定列表傳遞給sort函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM