xp-framework / webtest
Web tests for the XP Framework
v7.1.0
2022-03-04 09:04 UTC
Requires
- php: >=7.0.0
- xp-framework/core: ^11.0 | ^10.0 | ^9.0 | ^8.0
- xp-framework/http: ^10.0 | ^9.0 | ^8.0
- xp-framework/logging: ^11.0 | ^10.0 | ^9.0 | ^8.0
- xp-framework/patterns: ^9.0 | ^8.0
- xp-framework/unittest: ^11.0 | ^10.0 | ^9.0 | ^8.0
- xp-framework/xml: ^11.0 | ^10.0 | ^9.0 | ^8.0
README
Web tests for the XP Framework
Example
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/
.
Assertion methods
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)
Navigation
To follow links inside a page, a web test can utilize the click methods:
protected void clickLink(string $id); protected void clickLinkWithText(string $text);
Forms
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'); } }