2017-02-14 18 views
0

Я использую модуль «запрос» узла, чтобы сделать 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' возвращает неопределенный (или никакой возвратный оператор) - поэтому треска e для 'deleteRepo', где проблема на самом деле лежит –

+0

@JaromandaX Я попытался вернуть код состояния в конце deleteRepo(), но все равно получил ту же ошибку – Tom

+1

' Я попытался вернуть код состояния' ... да, я могу см. в моем хрустальном шаре то, что вы сделали ... не ... ясно, проблема в коде 'deleteRepo' ... как насчет того, чтобы вы опубликовали это, чтобы мы могли сказать вам, что вы делаете неправильно. Если вы что-то возвращаете и все еще получаете 'undefined', вы на самом деле ** не возвращаете ничего –

ответ

1

deleteRepo возвратит Promise только если 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