2016-11-30 4 views
1

In der App, mit der ich arbeite, haben wir eine GET Route, die die E-Mail-Adresse eines Benutzers überprüft. Wenn die E-Mail ungültig ist, antwortet der Server mit:ember-cli-mirage Fehler: Nichts zurückgegeben von Handler, aber Handler existiert

  • einen 200 Statuscode
  • Response-Header mit Content-Type:application/json; charset=utf-8
  • und den Antwortdaten selbst ist nur eine Reihe von „Diese E-Mail ist ungültig“

ich versuche, dies zu tun in ember-cli-mirage zu simulieren:

this.get('/ember_api/v1/validations/validate_email', function() { 
    return [200, { 'Content-Type': 'application/json' }, "This email is invalid"]; 

    // also tried this: 
    // return new Mirage.Response(200, { 'Content-Type': 'application/json' }, JSON.stringify({"message":"This email is invalid"})); 

    // and tried this: 
    // return "This email is invalid"; 
}); 

Der Test selbst ist eine Schaltfläche klicken, der diese Anforderung feuert:

GET "/ember_api/v1/validations/validate_email?email=fakey%40fakefakefake.com&skip_uniq=true" 

... und der Fehler Ich erhalte ist:

Pretender intercepted GET /ember_api/v1/validations/validate_email?email=tom%40gmail.com&skip_uniq=true but encountered an error: Nothing returned by handler for /ember_api/v1/validations/validate_email?email=tom%40gmail.com&skip_uniq=true. Remember to return [status, headers, body]; in your route handler.`

Es fragt mich return [status, headers, body], aber ich Ich tue dies in meinem Handler, und es wirft immer noch den Fehler.

Ist das tatsächlich ein Problem mit der Antwort? Muss ich meine API bearbeiten, um ein JSON-API-formatiertes Objekt zurückzugeben, damit ich den Test auf diese Weise schreiben kann?

Ich fühle mich wie ich in der Lage sein sollte, eine Zeichenfolge in meinem Test zurückzugeben, da das ist, was die App tut. Jede Hilfe wird geschätzt.

Antwort

0

Die this.get, die Sie verwenden, ist die Mirage-Version. Sie können auch this.pretender.get verwenden, die mit Ihrem aktuellen Codebeispiel funktionieren sollte ...

+0

Das hat funktioniert, was mir fremd ist. Wenn ich 'ember-cli-mirage' installiert habe, sollte dann nicht" die Mirage-Version "funktionieren? Warum muss ich 'this.pretender.get' machen? Ich sehe in den Mirage-Dokumenten nichts, was auf diese Methode verweist. Das allerletzte Beispiel in [doc here] (http://www.ember-cli-mirage.com/docs/v0.1.x/acceptance-testing/) zeigt eine Überschreibung mit 'server.put' anstelle von' server.pretender.put' –

+0

@TomNetzband Mirage hüllt den Prätendenten mit seiner eigenen zusätzlichen, vereinfachten Ebene ein (weshalb Ihr ursprünglicher Ansatz nicht funktionierte, da Sie "Pretender" anstatt "Mirage" sprachen. Aber es erlaubt Ihnen, nach unten zu gehen eine Schicht und benutze Prätender wenn gewünscht (http://www.ember-cli-mirage.com/docs/v0.2.x/configuration/#pretender) – acorncom

Verwandte Themen