[英]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.