Web tests for the XP Framework
The following web test case consists of opening GitHub's homepage and asserting the title to equal the company's name:
use unittest\web\{WebTestCase, Webtest};
use unittest\Test;
#[Webtest(url: 'https://github.com/')]
class GitHubTestCase extends WebTestCase {
#[Test]
public function home() {
$this->beginAt('/');
$this->assertStatus(200);
$this->assertTitleEquals('GitHub: Where the world builds software · GitHub');
}
}
Running it works as with normal test cases:
$ xp test GitHubTestCase
[.]
✓: 1/1 run (0 skipped), 1 succeeded, 0 failed
Memory used: 1861.12 kB (2474.66 kB peak)
Time taken: 1.225 seconds
To overwrite the default URL specified in the annotation, supply it as command line argument, e.g. unittest GitHubTestCase -a https://github.staging.lan/
.
On top of the assertion methods provided by the unittest library, the following response-related assertions are available:
public void assertStatus(int $status)
public void assertUrlEquals(peer.URL $url)
public void assertContentType(string $ctype)
public void assertHeader(string $header, string $value)
public void assertElementPresent(string $id)
public void assertTextPresent(string $text)
public void assertImagePresent(string $src)
public void assertLinkPresent(string $url)
public void assertLinkPresentWithText(string $text)
public void assertFormPresent(string $name= null)
public void assertTitleEquals($title)
To follow links inside a page, a web test can utilize the click methods:
protected void clickLink(string $id);
protected void clickLinkWithText(string $text);
To work with forms, the getForm()
method can be used:
use unittest\web\{WebTestCase, Webtest};
use unittest\Test;
#[Webtest(url: 'https://github.com/')]
class GitHubTestCase extends WebTestCase {
#[Test]
public function search_for() {
$this->beginAt('/');
$form= $this->getForm();
$form->getField('q')->setValue('XP Framework');
$form->submit();
$this->assertStatus(200);
$this->assertTitleEquals('Search · XP Framework · GitHub');
}
}