2017-02-17 5 views
1

EDIT: Ich denke, ich verstehe, warum es nicht funktioniert. Ich kann Argumente nicht übergeben, wenn ich flow.execute (getSpendermeldung) aufruft. Jemand hat eine bessere Lösung als den ApiCall in eine andere Funktion zu verpacken und "globale" Variablen zu verwenden? Ich beabsichtige, dies in einer anderen Datei zu haben und zu verwenden, wenn nötig.Winkelmesser Versprechen FN ist keine Funktion

Original-Beitrag: Für meine Winkelmesser Tests möchte ich Testdaten aus einer Datenbank erhalten. Ich habe dies mit dem Nodejs http-Modul getan, das bisher funktioniert. Seit ich mit diesen Daten getestet habe, habe ich Probleme bei der Synchronisation gemacht. Ich habe sie mit Jasmin Callback Lösung umgangen. Allerdings finde ich das zu unflexibel und würde gerne Versprechungen und den Kontrollfluss nutzen. Leider erhalte ich bei der Ausführung meines Codes einen Fehler: fn ist keine Funktion. Irgendwo tief in der WebDriver/lib/promise.js

Dies ist meine Funktion:

function getSpendermeldung(kennnummer) { 
var http = require('http'); 

var defer = protractor.promise.defer(); 

var options = { 
    host: 'localhost', 
    path: '/blabla/' + kennnummer 
}; 

var callback = function (response) { 
    var body = ''; 
    response.on('data', 
     function (chunk) { 
      body += chunk; 
     }); 
    response.on('end', 
     function() { 
      spendermeldung = JSON.parse(body); 
      defer.fulfill('json parsed'); 
     }); 
}; 

http.get(options, callback).end(); 

return defer.promise; 
} 

ich es mit diesem Aufruf:

var flow = browser.controlFlow(); 
flow.execute(getSpendermeldung('D0000001')); 

Jemand hat eine Idee, was ich bin fehlt. Vielen Dank.

PS: Würde gerne den Stacktrace veröffentlichen, aber ich bekomme nicht die Formatierung richtig.

Antwort

0

Sie rufen die Funktion - getSpendermeldung anstatt es als Argument übergeben. Und ja, ich denke, man kann es erreichen, ohne Verwendung von globalen Variablen und mit einem von einem erfordern eine andere Datei

Weitere Details zu den Argumenten, dass flow.execute sind here

var apiCall = require('the-file-that-containsthe-function') 
var flow = browser.controlFlow(); 
flow.execute(function(){return getSpendermeldung('D0000001')}); 
0

Sie müssen das verzögerte Objekt defer und nichtdefer.promise zurückgeben.

Zweitens, eine kleine Korrektur, erfüllen Sie die Versprechen vor dem Beenden der Anfrage. Sollten Sie das nicht tun?

http.get(options, callback).end(function nowFulfillPromise() { 
    defer.fulfill('json parsed'); 
}); 
+0

Ich habe ein beide versucht und immer in einem Ende Endlosschleife. Ich nehme an, das ist, weil get() im Gegensatz zu request() implizit end() aufruft. Die Rückgabe des Defenders scheint jedoch falsch zu sein. – Transzendental

+0

In meinen Projekten komme ich immer wieder zurück. – nilesh

Verwandte Themen