2016-11-28 71 views
0

我正在測試一些代碼,但我在使用sinon時遇到了一些麻煩。事情是,我的一個函數將函數作爲參數,我還沒有找到如何嘲笑它。測試一個函數的函數參數

通常你是這樣的:在以後使用後

var get = sinon.stub($, 'get') 

然後$不用彷徨:

sinon.assert.calledWith(get, expectedObject); 

我的代碼如下:

function getUsers(usersPromise) { 
    const config = { date: new Date() }; 
    return usersPromise(config) 
     .then(function (data) { 
      // Do stuff 
     }) 
} 

我想什麼做的是能夠嘲笑usersPromise。所以我會檢查它是否被正確的配置對象調用(我省略了很多值),然後在.then函數中聲明一些東西。

sinon.stub(usersPromise)將不起作用,所以我有點失落。

回答

0

有沒有足夠的信息給你一個完整的解決方案,但好像你首先要創建一個存根.then

var stubThen = sinon.stub(); 

然後爲get創建一個存根,並有stubThen作爲返回對象的屬性。

var stubGet = sinon.stub(); 
stubGet.returns({then: stubThen}); 

然後在你測試代碼通stubGet到,並相應確認。

0

我想要做的是能夠模擬usersPromise。

堅持TDD的結果之一是它迫使你在隔離的可測試塊中構建代碼。這是一個事實的直接結果,你不能對傳遞給它的函數或參數的各行進行測試。你的情況的解決方案是構建你的代碼是這樣的:

var usersPromise = function(){}; 
function getUsers(usersPromise) {}; 

現在你已經usersPromise一個孤立的模塊,你可以測試包括呼叫前磕碰出來。

+0

我已經這樣做了。問題是我需要在getUsers中聲明一些東西(也就是說選項對象中的內容),我認爲最好只是對該參數進行存根並查看它所調用的內容。 – kjonsson

+0

@kjonsson:你需要在'getUsers'中聲明什麼?請包括在你的問題。 – rabbitco