簡體   English   中英

測試作為函數的函數參數

[英]Testing a function argument which is a function

我正在測試一些代碼,但是在使用sinon時遇到了一些麻煩。 問題是我的函數之一將函數作為參數,但是我還沒有找到如何模擬它的方法。

通常,您會執行以下操作:

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

然后在使用$ .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)無法工作,所以我有點迷路。

沒有足夠的信息來為您提供完整的解決方案,但似乎您首先要為.then創建存根

var stubThen = sinon.stub();

然后為get創建一個存根,並將stubThen作為返回對象的屬性。

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

然后在您的測試代碼中,將stubGet傳遞給getUsers並進行相應的驗證。

我要做的是能夠模擬usersPromise。

堅持TDD的結果之一是,它迫使您在孤立的,可測試的塊中構建代碼。 這是以下事實的直接結果:您無法對函數的各個行或傳遞給它的參數執行測試。 在您的情況下,解決方案是按以下方式構建代碼:

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

現在,您已經使usersPromise一個隔離的塊,您可以對其進行測試,包括在調用getUsers之前將其存根。

暫無
暫無

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

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