2016-12-02 34 views
0

我正在茉莉花和Supertest在現有項目上工作。JavaScript如何知道執行失敗功能?

let checkResult = require('./check-result'); 

it('should do something', function(done){ 
request 
     .post('/route') 
     .expect(results => { 
     expect(results).toBeTruthy(); 
     }) 
     .end(checkResult(done)); 
}); 

當我console.log(done)我得到以下輸出:{ [Function] fail: [Function] }

下面是我們checkResult模塊。

//check-result 
module.exports = function checkResult(done){ 
    return function(seeIfThereIsError){ 
    if(seeIfThereIsError){ 
     done.fail(seeIfThereIsError) 
    } else { 
     done() 
    } 
    } 
}; 

發生錯誤時,執行if(seeIfThereIsError)塊。

我有兩個問題:

  1. 當傳遞到done如何checkResult在不checkResultseeIfThereIsError參數返回的功能得到填充?
    1. 如何創建簽名{ [Function] fail: [Function] }

總之,我怎麼能從頭創建一個任意例子來理解上的這一切是如何結合在一起的工作部件(語法)?

回答

1

當傳遞到done如何checkResult在不checkResultseeIfThereIsError參數返回的功能得到填充?

該函數被傳遞給end並被其調用。即end會傳遞一個值給函數。在其最簡單的形式,它會是什麼樣子:

request.end = function(callback) { 
    callback(false); 
}; 

如何簽名{ [Function] fail: [Function] }獲得創建?

console.log如何表示函數沒有標準化。此輸出簡單地告訴您該值是一個函數對象,它具有一個自定義屬性fail,它也是一個函數。

如果你想自己創造這樣的價值,這是它如何做到:

function done() {} 
done.fail = function() {}; 

無論console.log(done)給你你看到的輸出取決於瀏覽器和潛在的其他實現特定的啓發。

相關問題