2016-04-29 4 views
2

Ich benutze die Whoresrhys Fetch-Mock Npm-Modul, um Funktionstests in meiner App zu laufen. Ich möchte einen Abruf mit der Methode 'POST' und einer bestimmten Nutzlast verspotten.Wie hole ich eine Post-Anfrage mit einer Payload Mock

Es würde wie folgt aussehen:

fetchMock.mock({ 
     routes: { 
      name: 'LoginSuccess', 
      matcher: "https://myurl", 
      method: 'POST', 
      payload: { 
       params:{User: "[email protected]", Password: "password"} 
      }, 
      response: { 
       result:{ 
        message: "Successful login", 
        credentials: "XXXXXXXXXXXXX" 
       } 
      } 
     } 
    }); 

Ich möchte die Nutzlast meiner holen überprüfen und eine Antwort entsprechend geben. Zum Beispiel könnte ich eine Anmeldung simulieren, bei der der Benutzer das falsche Passwort einreicht, dann versuchen sie es erneut und reichen die korrekten Informationen ein und erhalten Zugriff. Gleiche URL, unterschiedliche Nutzdaten, unterschiedliche Antworten.

Ist es möglich, dies zu tun? Ich weiß, dass es möglich ist, die Methode des Holens zu überprüfen, aber ich möchte dasselbe mit der Nutzlast machen.

Oder gibt es einen besseren Weg, dies zu tun?

Ich habe keine Lösung in der Readme des Moduls oder im Testabschnitt von the fetch-mock package gefunden.

Antwort

1
fetchMock.mock({ 
    routes: [{ 
      name: 'LoginSuccess', 
      matcher: function(url, opts) { 
       return (url=="https://myurl" && opts && opts.params && opts.params.User=="[email protected]" && opts.params.Password=="password"); 
      }, 
      response: { 
       result:{ 
        message: "Successful login", 
        credentials: "XXXXXXXXXXXXX" 
       } 
      } 
     }, { 
      name: 'LoginFail', 
      matcher: function(url, opts) { 
       return (url=="https://myurl" && opts && opts.params && opts.params.User=="[email protected]" && opts.params.Password!=="password"); 
      }, 
      response: { 
       result:{ 
        message: "Unsuccessful login" 
       } 
      } 
    }] 
}); 
+0

Ist die Eigenschaft 'routes' erforderlich? Was es für mich funktionierte, war ein Objekt als Argument mit Namen, Matcher usw. zu senden. – alayor