New package unittest.web
thekid opened this issue · 0 comments
thekid commented
Scope of Change
A new package "unittest.web" will be created. It will contain the base
class "WebTestCase" with which web tests can be written.
Rationale
Integration testing.
Functionality
As with regular unittests, web tests are created by extending a base class,
in this case unittest.web.WebTestCase
.
Example
<?php
class PlanetXpTestCase extends WebTestCase {
protected function getConnection($url= NULL) {
return new HttpConnection($url ? $url : 'http://planet-xp.net/');
}
#[@test]
public function homePage() {
$this->beginAt('/xml/home');
$this->assertStatus(HTTP_OK);
$this->assertTitleEquals('XP Technology');
$this->assertTextPresent('Credits');
}
}
?>
Assertion Methods
In addition to the assertion methods from the unittest.TestCase
class (which the WebTestCase class extends), the following assertion
methods are available:
<?php
public function assertStatus($status, $message= 'not_equals');
public function assertUrlEquals(URL $url, $message= 'not_equals');
public function assertContentType($ctype, $message= 'not_equals');
public function assertHeader($header, $value, $message= 'not_equals');
public function assertElementPresent($id, $message= 'not_present');
public function assertElementNotPresent($id, $message= 'present');
public function assertTextPresent($text, $message= 'not_present');
public function assertTextNotPresent($text, $message= 'present');
public function assertImagePresent($src, $message= 'not_present');
public function assertImageNotPresent($src, $message= 'present');
public function assertLinkPresent($url, $message= 'not_present');
public function assertLinkNotPresent($url, $message= 'present');
public function assertLinkPresentWithText($text, $message= 'not_present');
public function assertLinkNotPresentWithText($text, $message= 'present');
public function assertFormPresent($name= NULL, $message= 'not_present');
public function assertFormNotPresent($name= NULL, $message= 'present');
public function assertTitleEquals($title, $message= 'not_equals');
?>
Navigation
To follow links inside a page, a web test can utilize the click methods:
<?php
protected function clickLink($id);
protected function clickLinkWithText($text);
?>
Forms
To work with forms, the getForm()
method can be used:
<?php
class XpSearchTestCase extends WebTestCase {
protected function getConnection($url= NULL) {
return new HttpConnection($url ? $url : 'http://planet-xp.net/');
}
#[@test]
public function searchFunction() {
$this->beginAt('/xml/home');
$form= $this->getForm();
$form->getField('query')->setValue('Unittest');
$form->submit();
$this->assertStatus(HTTP_OK);
$this->assertTitleEquals('Search for "Unittest" - XP Framework');
}
}
?>
Security considerations
n/a
Speed impact
No existing infrastructure is changed, thus none.
Dependencies
xp-framework/rfc #162 (implemented)