2017-02-14 68 views
0

我正在使用Node的'請求'模塊爲單元測試製作2個http請求。我必須確保1在另一個之前執行,並且正在嘗試使用承諾來執行此操作,但是出現錯誤「無法讀取屬性」,然後出現「未定義」錯誤。下面是其中的錯誤是發生功能:量角器:「無法讀取屬性」,然後「未定義」

this.setupSpec = function() { 
    var deleteItemsRepo = deleteRepo(strings.editRepo); 
    deleteItemsRepo.then(function() { 
     createRepo(strings.editRepo); 
    }); //todo: this must complete before createRepo starts, npm install async? 
    //createRepo(strings.editRepo); 
    return deleteItemsRepo; //return promise 
}; 

deleteRepo(...)和createRepo(...)只是調用http請求的功能。

這裏是deleteRepo():

var deleteRepo = function (repoName) { 
     return request.delete(browser.params.baseRestUrl + 'repositories/' + repoName, 
     {'auth': browser.params.auth}, function (e, r, user) { 
      console.log("Status code of deleteRepo('" + repoName + "'): " + r.statusCode); 
     }); 
}; 
+0

顯然問題是'deleteRepo'函數返回undefined(或者沒有返回語句) - 所以cod 'deleteRepo'是問題實際存在的地方 –

+0

@JaromandaX我試着在deleteRepo()的末尾返回狀態碼,但仍然得到相同的錯誤 – Tom

+1

'我試着返回狀態碼......是的,我可以在我的水晶球中看到你做了什麼...不是......顯然問題出在'deleteRepo'代碼...你如何發佈這個消息,以便我們可以告訴你你做錯了什麼。如果你正在返回一些東西,並且仍然返回undefined,那麼你實際上並不**返回任何東西 –

回答

1

deleteRepo會返回一個承諾只有當request.delete返回一個承諾 - 這似乎不太可能考慮到它使用回調

爲了好玩如下「promisify」 deleteRepo和利潤

var deleteRepo = function(repoName) { 
    return new Promise(function(resolve, reject) { 
     request.delete(browser.params.baseRestUrl + 'repositories/' + repoName, {'auth': browser.params.auth}, function(e, r, user) { 
      console.log("Status code of deleteRepo('" + repoName + "'): " + r.statusCode); 
      if(e) { 
       return reject(e); 
      } 
      resolve(r.statusCode); 
     }); 
    }); 
}; 
+0

工作,謝謝! – Tom

相關問題