Upload
dwain-lucas
View
215
Download
2
Embed Size (px)
Citation preview
FUNCTIONAL TESTS IN SYMFONY
Sayed Ahmed
B.Sc. Eng. in Computer Science & EngineeringM. Sc. in Computer Science
Exploring Computing for 14+ years
[email protected]://sayed.justetc.net
FUNCTIONAL TESTS to test your application from end to end from the request made by a browser to the response
sent by the server To test all the layers of an application:
the routing, the model the actions and the templates
Facilitate to test use cases Test scenarios (application usage scenarios)
Functional tests in Symfony provide a way to easily describe scenarios Each scenario can then be played automatically over and
over again by simulating the experience a user has in a browser
AUTOMATED TESTING USING SELENIUM
http://seleniumhq.org/ “Selenium automates browsers. That's it. What
you do with that power is entirely up to you. Primarily it is for automating web applications for testing purposes, but is certainly not limited to just that. Boring web-based administration tasks can (and should!) also be automated as well.”
THE SFBROWSER CLASS sfBrowser provides methods that simulates
navigation done in a classic browser: get() Gets a URL post() Posts to a URL call() Calls a URL (used for PUT and DELETE
methods) back() Goes back one page in the history forward() Goes forward one page in the history reload() Reloads the current page click() Clicks on a link or a button select() selects a radiobutton or checkbox deselect() deselects a radiobutton or checkbox restart() Restarts the browser
THE SFBROWSER CLASS
setHttpHeader() Sets an HTTP header setAuth() Sets the basic authentication
credentials setCookie() Set a cookie removeCookie() Removes a cookie clearCookies() Clears all current cookies followRedirect() Follows a redirect
SOME USAGE EXAMPLES OF THE SFBROWSER METHODS
THE SFTESTFUNCTIONAL CLASS
all tasks that generate a module automatically create a basic functional test file:
THE ABOVE CODE IS EQUIVALENT TO (USES: SFTESTFUNCTIONAL ):
THE REQUEST TESTER (WITH('REQUEST')->BEGIN)
isParameter() Checks a request parameter value
isFormat() Checks the format of a request isMethod() Checks the method hasCookie() Checks whether the request has
a cookie with the given name isCookie() Checks the value of a cookie
THE RESPONSE TESTER
checkElement() Checks if a response CSS selector match some criteria
checkForm() Checks an sfForm form object debug() Prints the response output to ease
debug matches() Tests a response against a regexp isHeader() Checks the value of a header isStatusCode() Checks the response status code isRedirected() Checks if the current response is a
redirect isValid() Checks if a response is well-formed XML
(you also validate the response again its document type be passing true as an argument)
RUNNING FUNCTIONAL TESTS
Execute the test file $ php
test/functional/frontend/categoryActionsTest.php Use the test:functional Task
$ php symfony test:functional frontend categoryActions
TEST DATA
include(dirname(__FILE__).'/../../bootstrap/functional.php');
$browser = new sfTestFunctional(new sfBrowser());
Doctrine_Core::loadData(sfConfig::get('sf_test_dir').'/fixtures');
WRITING FUNCTIONAL TESTS Writing functional tests is like playing a scenario in a
browser
DEBUGGING FUNCTIONAL TESTS
$browser->with('response')->debug(); symfony provides the ~debug|Debug~()
method to output the response header and content:
FUNCTIONAL TESTS HARNESS
The test:functional task can also be used to launch all functional tests for an application:
$ php symfony test:functional frontend
TESTS HARNESS
there is also a task to launch all tests for a project (unit and functional): $ php symfony test:all
REFERENCES http://
www.symfony-project.org/jobeet/1_4/Doctrine/en/09