

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Resolver in AWS AppSync (VTL) testen und debuggen
<a name="test-debug-resolvers"></a>

**Anmerkung**  
Wir unterstützen jetzt hauptsächlich die APPSYNC\$1JS-Laufzeit und ihre Dokumentation. [Bitte erwägen Sie, die APPSYNC\$1JS-Laufzeit und ihre Anleitungen hier zu verwenden.](https://docs.aws.amazon.com/appsync/latest/devguide/configuring-resolvers-js.html)

AWS AppSync führt Resolver in einem GraphQL-Feld gegen eine Datenquelle aus. Wie in der [Übersicht über Resolver-Mapping-Vorlagen beschrieben, kommunizieren Resolver](resolver-mapping-template-reference-overview.md#aws-appsync-resolver-mapping-template-reference-overview) mithilfe einer Vorlagensprache mit Datenquellen. Auf diese Weise können Sie das Verhalten anpassen und Logik und Bedingungen vor und nach der Kommunikation mit der Datenquelle anwenden. Eine einführende Programmieranleitung im Stil eines Tutorials zum Schreiben von Resolvern finden Sie im Programmierleitfaden für [Resolver-Mapping-Vorlagen](resolver-mapping-template-reference-programming-guide.md#aws-appsync-resolver-mapping-template-reference-programming-guide).

Um Entwicklern beim Schreiben, Testen und Debuggen dieser Resolver zu helfen, bietet die AWS AppSync Konsole auch Tools zum Erstellen einer GraphQL-Anfrage und -Antwort mit Scheindaten bis hin zum einzelnen Field-Resolver. Darüber hinaus können Sie Abfragen, Mutationen und Abonnements in der AWS AppSync Konsole durchführen und einen detaillierten Protokollstream der gesamten Anfrage CloudWatch von Amazon einsehen. Dieser umfasst die Ergebnisse aus einer Datenquelle.

## Testen mit Scheindaten
<a name="testing-with-mock-data"></a>

Wenn ein GraphQL-Resolver aufgerufen wird, enthält er ein `context` Objekt, das Informationen über die Anfrage enthält. Dazu gehören Argumente von einem Client, Identitätsinformationen sowie Daten aus dem übergeordneten GraphQL-Feld. Es enthält auch die Ergebnisse aus der Datenquelle, die in der Antwortvorlage verwendet werden können. Weitere Informationen über diese Struktur und die verfügbaren Helferobjekt-Dienstprogramme finden Sie in der [Referenz zur Resolver-Zuweisungsvorlage "Context"](resolver-context-reference.md#aws-appsync-resolver-mapping-template-context-reference).

*Beim Schreiben oder Bearbeiten eines Resolvers können Sie ein Modell- oder *Testkontextobjekt* an den Konsoleneditor übergeben.* Auf diese Weise können Sie sehen, wie sowohl die Anforderungs- als auch die Antwortvorlage ausgewertet werden, ohne tatsächlich auf eine Datenquelle zuzugreifen. Beispiel: Sie können ein `firstname: Shaggy`-Testargument übergeben und sehen, wie es bei der Verwendung von `$ctx.args.firstname` in Ihrem Vorlagencode ausgewertet wird. Sie können auch die Auswertung eines Dienstprogramm-Helferobjekts wie `$util.autoId()` oder `util.time.nowISO8601()` testen.

### Resolver testen
<a name="test-a-resolver"></a>

In diesem Beispiel werden Resolver mithilfe der AWS AppSync Konsole getestet.

1. Melden Sie sich bei der an AWS-Managementkonsole und öffnen Sie die [AppSyncKonsole](https://console.aws.amazon.com/appsync/).

   1. Wählen Sie im **APIs Dashboard** Ihre GraphQL-API aus.

   1. **Wählen Sie in der **Seitenleiste** Schema aus.**

1. Falls Sie dies noch nicht getan haben, wählen Sie unter dem Typ und neben dem Feld die Option **Anhängen** aus, um Ihren Resolver hinzuzufügen.

   [Weitere Informationen zum Erstellen eines vollständigen Resolvers finden Sie unter Resolver konfigurieren.](https://docs.aws.amazon.com/appsync/latest/devguide/configuring-resolvers.html)

   Wählen Sie andernfalls den Resolver aus, der sich bereits im Feld befindet.

1. Wählen Sie oben auf der Seite **Resolver bearbeiten** die **Option Testkontext auswählen und dann Neuen Kontext** **erstellen** aus.

1. Wählen Sie ein Beispielkontextobjekt aus oder füllen Sie die JSON-Datei manuell im Fenster mit dem **Ausführungskontext unten** aus.

1. Geben Sie einen **Namen für den Textkontext** ein.

1. Wählen Sie die Schaltfläche **Save (Speichern)** aus.

1. Wählen Sie oben auf der Seite **„Resolver bearbeiten**“ die Option **Test ausführen** aus.

Ein praktischeres Beispiel: Angenommen, Sie haben eine App, die einen GraphQL-Typ speichert`Dog`, die automatische ID-Generierung für Objekte verwendet und diese in Amazon DynamoDB speichert. Sie können außerdem einige Werte aus den Argumenten einer GraphQL-Mutation schreiben und nur bestimmten Benutzern das Anzeigen einer Antwort erlauben. Das Schema kann beispielsweise wie folgt aussehen:

```
type Dog {
  breed: String
  color: String
}

type Mutation {
  addDog(firstname: String, age: Int): Dog
}
```

Wenn Sie einen Resolver für die `addDog` Mutation hinzufügen, können Sie ein Kontextobjekt wie im folgenden Beispiel auffüllen. Nachstehend werden die Argumente `name` und `age` des Clients verwendet und ein `username` im `identity`-Objekt mit Daten gefüllt:

```
{
    "arguments" : {
        "firstname": "Shaggy",
        "age": 4
    },
    "source" : {},
    "result" : {
        "breed" : "Miniature Schnauzer",
        "color" : "black_grey"
    },
    "identity": {
        "sub" : "uuid",
        "issuer" : " https://cognito-idp.{region}.amazonaws.com/{userPoolId}",
        "username" : "Nadia",
        "claims" : { },
        "sourceIp" :[  "x.x.x.x" ],
        "defaultAuthStrategy" : "ALLOW"
    }
}
```

Sie können dies mithilfe der folgenden Anforderungs- und Antwortzuweisungsvorlagen testen:

 **Request Template** 

```
{
    "version" : "2017-02-28",
    "operation" : "PutItem",
    "key" : {
        "id" : { "S" : "$util.autoId()" }
    },
    "attributeValues" : $util.dynamodb.toMapValuesJson($ctx.args)
}
```

 **Antwortvorlage** 

```
#if ($context.identity.username == "Nadia")
  $util.toJson($ctx.result)
#else
  $util.unauthorized()
#end
```

Die ausgewertete Vorlage enthält die Daten aus Ihrem Testkontextobjekt und den generierten Wert aus `$util.autoId()`. Wenn Sie `username` zu einem anderen Wert als `Nadia` ändern, werden die Ergebnisse nicht zurückgegeben, da die Autorisierungsprüfung fehlschlägt. Weitere Informationen zur detaillierten Zugriffskontrolle finden Sie unter Anwendungsfälle für die [Autorisierung](security-authorization-use-cases.md#aws-appsync-security-authorization-use-cases).

### Testen von Mapping-Vorlagen mit's AWS AppSync APIs
<a name="testing-with-appsync-api"></a>

Sie können den `EvaluateMappingTemplate` API-Befehl verwenden, um Ihre Mapping-Vorlagen mit simulierten Daten aus der Ferne zu testen. Um mit dem Befehl zu beginnen, stellen Sie sicher, dass Sie die `appsync:evaluateMappingTemplate` entsprechende Berechtigung zu Ihrer Richtlinie hinzugefügt haben. Beispiel:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "appsync:evaluateMappingTemplate",
            "Resource": "arn:aws:appsync:us-east-1:111122223333:*"
        }
    ]
}
```

------

Sie können den Befehl nutzen, indem Sie das [AWS CLI](https://aws.amazon.com/cli/)oder verwenden [AWS SDKs](https://aws.amazon.com/tools/). Nehmen Sie zum Beispiel das `Dog` Schema und die zugehörigen request/response Mapping-Vorlagen aus dem vorherigen Abschnitt. Speichern Sie die Anforderungsvorlage mithilfe der CLI auf Ihrer lokalen Station in einer Datei mit dem Namen `request.vtl` und speichern Sie das `context` Objekt anschließend in einer Datei mit dem Namen`context.json`. Führen Sie in Ihrer Shell den folgenden Befehl aus:

```
aws appsync evaluate-mapping-template --template file://request.vtl --context file://context.json
```

Dieser Befehl gibt die folgende Antwort zurück.

```
{
  "evaluationResult": "{\n    \"version\" : \"2017-02-28\",\n    \"operation\" : \"PutItem\",\n    \"key\" : {\n        \"id\" : { \"S\" : \"afcb4c85-49f8-40de-8f2b-248949176456\" }\n    },\n    \"attributeValues\" : {\"firstname\":{\"S\":\"Shaggy\"},\"age\":{\"N\":4}}\n}\n"
}
```

Das `evaluationResult` enthält die Ergebnisse des Testens Ihrer bereitgestellten Vorlage mit der bereitgestellten`context`. Sie können Ihre Vorlagen auch mit dem testen AWS SDKs. Hier ist ein Beispiel für die Verwendung des AWS SDK für JavaScript V2: 

```
const AWS = require('aws-sdk')
const client = new AWS.AppSync({ region: 'us-east-2' })

const template = fs.readFileSync('./request.vtl', 'utf8')
const context = fs.readFileSync('./context.json', 'utf8')

client
  .evaluateMappingTemplate({ template, context })
  .promise()
  .then((data) => console.log(data))
```

Mit dem SDK können Sie ganz einfach Tests aus Ihrer bevorzugten Testsuite integrieren, um das Verhalten Ihrer Vorlage zu überprüfen. Wir empfehlen, Tests mit dem [Jest Testing Framework](https://jestjs.io/) zu erstellen, aber jede Testsuite funktioniert. Der folgende Ausschnitt zeigt einen hypothetischen Validierungslauf. Beachten Sie, dass wir davon ausgehen, dass es sich bei der Bewertungsantwort um ein gültiges JSON handelt. Daher verwenden wir diese Methode, `JSON.parse` um JSON aus der Zeichenkettenantwort abzurufen:

```
const AWS = require('aws-sdk')
const fs = require('fs')
const client = new AWS.AppSync({ region: 'us-east-2' })

test('request correctly calls DynamoDB', async () => {
  const template = fs.readFileSync('./request.vtl', 'utf8')
  const context = fs.readFileSync('./context.json', 'utf8')
  const contextJSON = JSON.parse(context)
  
  const response = await client.evaluateMappingTemplate({ template, context }).promise()
  const result = JSON.parse(response.evaluationResult)
  
  expect(result.key.id.S).toBeDefined()
  expect(result.attributeValues.firstname.S).toEqual(contextJSON.arguments.firstname)
})
```

 Dies führt zu dem folgenden Ergebnis:

```
Ran all test suites.
> jest

PASS ./index.test.js
✓ request correctly calls DynamoDB (543 ms)

Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 1.511 s, estimated 2 s
```

## Debuggen einer Live-Abfrage
<a name="debugging-a-live-query"></a>

Es gibt keinen Ersatz für einen end-to-end Test und eine Protokollierung, um eine Produktionsanwendung zu debuggen. AWS AppSync ermöglicht es Ihnen, Fehler und vollständige Anfragedetails über Amazon zu protokollieren CloudWatch. Darüber hinaus können Sie die AWS AppSync Konsole verwenden, um GraphQL-Abfragen, -Mutationen und -Abonnements zu testen und Protokolldaten für jede Anfrage live zurück in den Abfrage-Editor zu streamen, um sie in Echtzeit zu debuggen. Für Abonnements zeigen die Protokolle Verbindungszeitinformationen an.

Um dies durchzuführen, müssen Sie Amazon CloudWatch Logs im Voraus aktiviert haben, wie unter [Überwachung und Protokollierung](monitoring.md#aws-appsync-monitoring) beschrieben. Wählen Sie als Nächstes in der AWS AppSync Konsole die Registerkarte **Abfragen** und geben Sie dann eine gültige GraphQL-Abfrage ein. Klicken Sie im unteren rechten Bereich auf das **Protokollfenster und ziehen Sie es, um die Protokollansicht** zu öffnen. Wählen Sie oben auf der Seite das Wiedergabe-Pfeilsymbol, um die GraphQL-Abfrage auszuführen. In wenigen Augenblicken werden die vollständigen Anforderungs- und Antwortprotokolle für die Operation an diesen Abschnitt der Konsole gestreamt und können angezeigt werden.