2017-02-14 41 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

相关问题