2017-03-16 4 views
7

Ich muss eine funktionale Testsuite schreiben (die eine GraphQl-API testen wird). Die Testsuite befindet sich in einem separaten Repository und Container von der API.Wie man eine GraphQl API prüft?

Ein Ansatz, an den ich dachte, wäre die Verwendung eines BDD-Frameworks innerhalb der Testsuite. Die Suite würde nach dem Empfang einer HTTP-Anforderung alle BDD-Tests ausführen.

Ich erwog, Cucumber.js als BDD-Framework zu verwenden. Ich weiß, dass es npm test gibt. Ich bin mir nicht sicher, wie ich die Tests durchführen werde. Es ist ein wenig peinlich, auf diese Weise ein Unit-Testing-Framework zu verwenden. Ist dieser Ansatz sinnvoll?

Welches Werkzeug gibt es, um so etwas zu tun? Ich bin offen für verschiedene Sprachen und Werkzeuge.

+0

Ich bin nicht erfahren, um eine gute Antwort zu geben, aber dieser Beitrag hat mir geholfen https://medium.com/entria/testing-a-graphql-server-using-jest-4e00d0e4980e#.qohdw3wuz Ich habe es versucht Gurke mit meiner Implementierung hier zu implementieren, ist ein Beispiel https://github.com/RedLeap/swapi-graphql-module/blob/5da487bf28897aa228d937712dabfd6580cb301d/features/planets.feature - nur wiederholen, ich bin kein erfahrener Tester nur dachte, ich ' d geben Sie meine zwei Cent, anstatt nur unbeantwortet zu lassen. Wenn Sie Fragen haben, lassen Sie es mich wissen :) –

Antwort

1

Sie können einfach npm-Test mit dem gewünschten Test-Runner verwenden. Ich benutze Mocha und Chai. Jest könnte ein bisschen besser sein, da ich glaube, es ist wahrscheinlich die am weitesten fortgeschrittene Test-Suite. Sie haben Tests einfach wie Endpunkte erstellt.

 it('should be null when user is not logged in', async() => { 
     const query = ` 
      query { 
      user(id: "") { 
       username 
       email 
      } 
      } 
     ` 

    const rootValue = {}; 
    const context = {}; 

    const result = await graphql(schema, query, rootValue, context); 
    const { data } = result; 

    expect(data.user).to.equal(null); 
    }); 

ziemlich einfache Möglichkeit, es zu testen. Sie führen auch eine Vorher-Anweisung aus, indem Sie den relevanten Benutzer in Ihre Datenbank einfügen. Das Problem, eine Testsuite getrennt zu halten, besteht darin, dass Sie direkt auf die Datenbank zugreifen müssen. Ihre Tests sollten nicht auf andere API-Aufrufe angewiesen sein, da dies unnötige Abhängigkeiten erzeugt. Wenn also ein Test bricht, ist es plötzlich schwieriger, die Ursache herauszufinden.

0

Karate eine relativ neue Web-Services-Test-Automation Framework, das für die Prüfung GraphQL Antworten wegen 2-spezifischen Fähigkeiten

  • Textmanipulation gut geeignet sein geschieht, ist: es ist einfach zu in-line GraphQL Abfragen, lese sie aus (wiederverwendbaren) Dateien und substitute placeholders
  • JsonPath-Zusicherungen: Obwohl GraphQL-Antworten JSON sind, ändern sie sich dynamisch abhängig von der Anfrage (kein festes Schema) und neigen dazu, tief verschachtelt zu sein. Karate nativen JsonPath Behauptungen können Sie nur auf den Brocken konzentrieren, was Sie brauchen, und Sie können die erwarteten Ergebnisse in Form Short-Cut-JSON auszudrücken, die sehr gut lesbar ist

Hier ist ein gutes Beispiel: graphql.feature mit einem Snippet unten:

# you can also read this query from a file 
Given text query = 
""" 
{ 
    pokemon(name: "Pikachu") { 
    id 
    number 
    name 
    attacks { 
     special { 
     name 
     type 
     damage 
     } 
    } 
    } 
} 
""" 
And request { query: '#(query)' } 
When method post 
Then status 200 

# json-path makes it easy to focus only on the parts you are interested in 
# which is especially useful for graph-ql as responses tend to be heavily nested 
* match $.data.pokemon.number == '025' 

# the '..' wildcard is useful for traversing deeply nested parts of the json 
* def attacks = get[0] response..special 
* match attacks contains { name: 'Thunderbolt', type: 'Electric', damage: 55 } 

obwohl Karate eine Java-Runtime erfordert, ist die Syntax Cucumber/Gherkin die sprachneutral ist, und man kann leicht Karate Tests und reports, um Ihre bestehenden kontinuierlichen Integration set-up hinzufügen. JavaScript-Programmierer werden sich besonders zu Hause fühlen, da Karate embeds a JavaScript runtime und 'nachsichtig' JSON unterstützt (keine doppelten Anführungszeichen erforderlich, keine Notwendigkeit, JSON-Schlüssel in Anführungszeichen einzuschließen).

Haftungsausschluss: Entwickler hier.