Pregunta

Quiero usar el módulo Node Http para llamar a mi servidor directamente para configurar mis pruebas de Transportador.Http se basa en devolución de llamadas y quiero convertir eso en promesas.

Por ejemplo, quiero que esta función devuelva la promesa:

function callMyApi() {
  var promise = // somehow create promise;

  http.request({path: '/yada/yada', method: 'POST'}, function(resp) {
    promise.complete(resp);
  });

  return promise;
}

Entonces, la pregunta es:¿Qué necesito? require() y poner en lugar de "crear de alguna manera una promesa" para que esto funcione?

¿Fue útil?

Solución

Protractor utiliza las promesas de WebDriver y expone a la API a nivel mundial en "protractor".Así que deberías poder hacer

var deferred = protractor.promise.defer();
return deferred.promise;

Para la API completa de promesa de WebDriverJS, consulte el código en https://code.google.com/p/selenium/source/browse/javascript/webdriver/promise.js

Otros consejos

Esta es la forma incorrecta de hacerlo, pero conocer el flujo de control del transportador podría ayudar.Si desea ejecutar Javascript regularmente en el orden del transportador, agréguelo a través del flujo de control.

En este caso, podría usar su propia biblioteca de promesas si lo desea, luego simplemente use browser.wait esperar a que se cumplan tus promesas.

var Promise = require('bluebird');
var promises = [];
browser.controlFlow().execute(function() {
    var p = new Promise...
    promises.push(p);
});
browser.wait( function(){ return Promise.all(promises); }, timeoutMs );

No uso esto para promesas regulares, sino para console.log declaraciones o cronometrar una parte de una prueba, o incluso usar fs imprimir algo en una prueba en un archivo.

var startTime, duration; 
browser.controlFlow().execute(function() {
    startTime = new Date().getTime();
});
//Protractor code you want timed
browser.controlFlow().execute(function() {
    duration = new Date().getTime() - startTime;
    console.log("Duration:", duration);
});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top