# Zusicherungen

Zusicherungen sind das Herz der UnitTests; sie können verwendet werden um zu prüfen, ob die Ergebnisse das sind was man erwartet. Zu diesem Zweck bietet `Zend_Test_PHPUnit_ControllerTestCase` eine Anzahl an Zusicherungen, um das Testen eigener MVC-Anwendungen und Controller einfacher zu machen.

## CSS-Selektor-Zusicherungen

CSS-Selektoren sind ein einfacher Weg um zu prüfen, dass bestimmte Teile im Inhalt der Antwort enthalten sind. Mit ihnen ist es auch trivial sicherzustellen, dass Elemente vorhanden sind, die für Javascript-UIs und/oder AJAX-Integrationen notwendig sind; die meisten JS-Toolkits bieten einige Mechanismen für das Abholen von DOM-Elementen an, die auf CSS-Selektoren basieren, so dass die Syntax die gleiche wäre.

Diese Funktionalität wird über Zend_Dom_Query angeboten und in ein Set von 'Query'-Zusicherungen integriert. Jede dieser Zusicherungen nimmt als erstes Argument einen CSS-Selektor mit optional hinzugefügten Argumenten und/oder einer Fehlermeldung, basierend auf dem Typ der Zusicherung. Die Regeln für das Schreiben der CSS-Selektoren kann im Kapitel Theorie der Anwendung von Zend_Dom_Query gefunden werden. Abfragezusicherungen enthalten:

- `assertQuery($path, $message)`: Nimmt an, dass ein oder mehrere DOM Elemente, die dem gegebenen CSS-Selektor entsprechen, vorhanden sind. Wenn eine `$message` vorhanden ist, wird diese jeder fehlgeschlagenen Meldung einer Zusicherung vorangestellt.

- `assertQueryContentContains($path, $match, $message)`: Nimmt an, dass ein oder mehrere DOM Elemente, die dem angegebenen CSS-Selektor entsprechen, vorhanden sind, und dass zumindest einer dem Inhalt entspricht, der in `$match` angegeben wurde. Wenn eine `$message` vorhanden ist, wird diese jeder fehlgeschlagenen Meldung einer Zusicherung vorangestellt.

- `assertQueryContentRegex($path, $pattern, $message)`: Nimmt an, dass ein oder mehrere DOM-Elemente vorhanden sind, die dem angegebenen CSS-Selektor entsprechen und dass zumindest einer dem Regulären Ausdruck entspricht, der in `$pattern` angegeben wurde, Wenn eine `$message` vorhanden ist, wird diese jeder fehlgeschlagenen Meldung einer Zusicherung vorangestellt.

- `assertQueryCount($path, $count, $message)`: Nimmt an, dass exakt `$count` DOM-Elemente dem angegebenen CSS Selektor entsprechen. Wenn eine `$message` vorhanden ist, wird diese jeder fehlgeschlagenen Meldung einer Zusicherung vorangestellt.

- `assertQueryCountMin($path, $count, $message)`: Nimmt an, dass zumindest `$count` DOM-Element dem angegebenen CSS Selektor entsprechen. Wenn eine `$message` vorhanden ist, wird diese jeder fehlgeschlagenen Meldung einer Zusicherung vorangestellt. Achtung: Die Spezifizierung eines Wertes von 1 für `$count` ist das Gleiche wie die einfache Verwendung von `assertQuery()`.

- `assertQueryCountMax($path, $count, $message)`: Nimmt an, dass es nicht mehr als `$count` DOM-Elemente gibt, die dem angegebenen CSS-Selektor entsprechen. Wenn eine `$message` vorhanden ist, wird diese jeder fehlgeschlagenen Meldung einer Zusicherung vorangestellt. Achtung: Die Spezifizierung eines Wertes von 1 für `$count` ist das Gleiche wie die einfache Verwendung von `assertQuery()`.

Zusätzlich hat jede der obigen Methoden eine 'Not'-Variante, die eine negative Zusicherung anbietet: `assertNotQuery()`, `assertNotQueryContentContains()`, `assertNotQueryContentRegex()` und `assertNotQueryCount()`. (Es ist zu beachten, dass die min und max Zählen keine dieser Varianten haben, was aus logischen Gründen so ist.)

## XPath-Zusicherungen

Einige Entwickler sind mit XPath vertrauter als mit CSS-Selektoren, und deshalb werden für alle Abfrage Zusicherungen auch XPath-Varianten engeboten. Diese sind:

- `assertXpath($path, $message = '')`

- `assertNotXpath($path, $message = '')`

- `assertXpathContentContains($path, $match, $message = '')`

- `assertNotXpathContentContains($path, $match, $message = '')`

- `assertXpathContentRegex($path, $pattern, $message = '')`

- `assertNotXpathContentRegex($path, $pattern, $message = '')`

- `assertXpathCount($path, $count, $message = '')`

- `assertNotXpathCount($path, $count, $message = '')`

- `assertXpathCountMin($path, $count, $message = '')`

- `assertNotXpathCountMax($path, $count, $message = '')`

## Umleitungszusicherungen

Oft wird eine Aktion umgeleitet. Statt der Umleitung zu folgen, erlaubt es `Zend_Test_PHPUnit_ControllerTestCase`, diese Umleitungen mit einer handvoll von Zusicherungen zu Testen.

- `assertRedirect($message = '')`: Nimmt einfach an, dass eine Umleitung stattgefunden hat.

- `assertNotRedirect($message = '')`: Nimmt einfach an, dass keine Umleitung stattgefunden hat.

- `assertRedirectTo($url, $message = '')`: Nimmt an, dass eine Umleitung stattgefunden hat und dass der Wert des Ziel-Headers die angegebene `$url` ist.

- `assertNotRedirectTo($url, $message = '')`: Nimmt an, dass eine Umleitung entweder NICHT stattgefunden hat oder dass der Wert des Ziel-Headers NICHT die angegebene `$url` ist.

- `assertRedirectRegex($pattern, $message = '')`: Nimmt an, dass eine Umleitung stattgefunden hat und dass der Wert des Ziel-Headers dem durch `$pattern` angegebenen regulären Ausdruck entspricht.

- `assertNotRedirectRegex($pattern, $message = '')`: Nimmt an, dass eine Umleitung entweder NICHT stattgefunden hat oder dass der Wert des Ziel-Headers NICHT dem durch `$pattern` angegebenen regulären Ausdruck entspricht.

## Antwort-Header-Zusicherungen

Zusätzlich zur Prüfung auf Umleitungs-Header, ist es oft notwendig auf spezielle HTTP-Antwort-Codes und -Header zu prüfen -- zum Beispiel, um zu erkennen, ob eine Aktion eine 404 oder 500 Antwort hervorruft oder um sicherzustellen, dass JSON-Antworten die entsprechenden Content-Type-Header enthält. Die folgenden Zusicherungen sind vorhanden.

- `assertResponseCode($code, $message = '')`: Nimmt an, dass die Antwort zum gegebenen HTTP-Antwort-Code geführt hat.

- `assertHeader($header, $message = '')`: Nimmt an, dass die Antwort den gegebenen Header enthält.

- `assertHeaderContains($header, $match, $message)`: Nimmt an, dass die Antwort den gegebenen Header enthält und dass sein Inhalt den gegebenen String enthält.

- `assertHeaderRegex($header, $pattern, $message)`: Nimmt an, dass die Antwort den gegebenen Header enthält und dass sein Inhalt der gegebenen Regex entspricht.

Zusätzlich hat jede der obigen Zusicherungen eine 'Not'-Variante für negative Zusicherungen.

## Anfragezusicherungen

Es ist oft sinnvoll gegen die letzte Aktion, den Controller und das Modul zu prüfen; zusätzlich ist es möglich die genommene Route die prüfen. Die folgenden Zusicherungen können in diesen Fällen helfen:

- `assertModule($module, $message = '')`: Nimmt an, dass das angegebene Modul in der letzten Dispatch-Aktion verwendet wurde.

- `assertController($controller, $message = '')`: Nimmt an, dass der angegebene Controller in der letzten ausgeführten Aktion ausgewählt wurde.

- `assertAction($action, $message = '')`: Nimmt an, dass die angegebene Aktion zuletzt ausgeführt wurde.

- `assertRoute($route, $message = '')`: Nimmt an, dass die angegebene benannte Route dem Router entsprochen hat.

Jede hat auch eine 'Not'-Variante für negative Zusicherungen.