2016-04-29 9 views
1

Ich bin nicht ganz sicher, ich verstehe, was los ist, wenn ich versuche, Post HttpRequest zu testen. Hier ist der Code meiner Klasse, die die Arbeit erledigt:Testen Dart Ajax HttpRequest

import 'dart:html'; 

class HttpReportAdapter { 

    var logmaster; 
    int log_level = 2; 
    String url; 

    HttpReportAdapter(this.url) {} 

    post(r, level) { 

    var data = { 
     'message' : r, 
     'log_level' : log_level.toString(), 
    }; 

    if(this.logmaster != null) 
    data['log_level_string'] = this.logmaster.log_level_as_string(level); 

    return HttpRequest.postFormData(this.url, data); 

    } 

} 

Ein hier ist der Testcode:

import '../lib/report_adapters/http_report_adapter.dart'; 
import "package:test/test.dart"; 

void main() { 

    var adapter; 

    setUp(() { 
    adapter = new HttpReportAdapter("http://localhost:4567/errors"); 
    }); 

    test("sends an ajax request and acknowledges a 200 response from the server",() { 
    adapter.post("message", 2).then((_) => print("!!!!!!!!!")); 
    }); 

} 

Vorerst wie Sie sehen können, ich versuche nicht einmal etwas zu testen, einfach etwas ausgeben. Während dieser läuft die Anfrage tatsächlich an http://localhost:4567/errors und ich kann es in den Protokollen meines Servers sehen.

Die !!!!!!!! wird jedoch nicht gedruckt. Zusätzlich , schlägt der Test fehl mit:

This test failed after it had already completed. Make sure to use 
[expectAsync] or the [completes] matcher when testing async code. 

Allerdings, wenn ich meinen Server zwingen, für 1 Sekunde zu schlafen, bevor eine Antwort zu senden, ist der Test ohne Fehler durchläuft.

Ich würde mich freuen, wenn jemand mir helfen würde, einen Sinn von allem zu machen und folglich den richtigen Test zu schreiben.

Antwort

1

Sie müssen die Future so der Test zurückkehren kann warten, bis es zu vervollständigen

return adapter.post("message", 2).then((_) => print("!!!!!!!!!")); 

Andernfalls wird der Test abgeschlossen ist, bevor die Antwort vom Server ankommt.

+0

Aber 'HttpRequest.postFormData' gibt bereits eine Zukunft zurück und das ist, was ich von meiner' post() 'Methode zurückgebe. https://api.dartlang.org/1.14.2/dart-html/HttpRequest/postFormData.html – snitko

+0

Oh, ich sehe, von der Prüfung selbst zurückkehren, habe es. Ich habe das gerade ausprobiert und hier ist der Fehler, dass ich einen Fehler mit einer seltsamen Ausgabe bekomme: '[Objekt XMLHttpRequestProgressEvent]' – snitko

+0

Bitte versuchen Sie 'event.target.status' und' event.target.statusText' zu drucken, wo 'event' ist das 'XMLHttpRequestProgressEvent' –