mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Fixed ReST error in docs/testing.txt
git-svn-id: http://code.djangoproject.com/svn/django/trunk@4507 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
		
							
								
								
									
										117
									
								
								docs/testing.txt
									
									
									
									
									
								
							
							
						
						
									
										117
									
								
								docs/testing.txt
									
									
									
									
									
								
							@@ -92,7 +92,7 @@ Writing unittests
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Like doctests, Django's unit tests use a standard library module: unittest_.
 | 
					Like doctests, Django's unit tests use a standard library module: unittest_.
 | 
				
			||||||
As with doctests, Django's test runner looks for any unit test cases defined
 | 
					As with doctests, Django's test runner looks for any unit test cases defined
 | 
				
			||||||
in ``models.py``, or in a ``tests.py`` file stored in the application 
 | 
					in ``models.py``, or in a ``tests.py`` file stored in the application
 | 
				
			||||||
directory.
 | 
					directory.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
An equivalent unittest test case for the above example would look like::
 | 
					An equivalent unittest test case for the above example would look like::
 | 
				
			||||||
@@ -111,8 +111,8 @@ An equivalent unittest test case for the above example would look like::
 | 
				
			|||||||
            self.assertEquals(self.cat.speak(), 'The cat says "meow"')
 | 
					            self.assertEquals(self.cat.speak(), 'The cat says "meow"')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
When you `run your tests`_, the test utility will find all the test cases
 | 
					When you `run your tests`_, the test utility will find all the test cases
 | 
				
			||||||
(that is, subclasses of ``unittest.TestCase``) in ``models.py`` and 
 | 
					(that is, subclasses of ``unittest.TestCase``) in ``models.py`` and
 | 
				
			||||||
``tests.py``, automatically build a test suite out of those test cases, 
 | 
					``tests.py``, automatically build a test suite out of those test cases,
 | 
				
			||||||
and run that suite.
 | 
					and run that suite.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
For more details about ``unittest``, see the `standard library unittest
 | 
					For more details about ``unittest``, see the `standard library unittest
 | 
				
			||||||
@@ -164,12 +164,12 @@ in different circumstances.
 | 
				
			|||||||
Testing Tools
 | 
					Testing Tools
 | 
				
			||||||
=============
 | 
					=============
 | 
				
			||||||
 | 
					
 | 
				
			||||||
To assist in testing various features of your application, Django provides 
 | 
					To assist in testing various features of your application, Django provides
 | 
				
			||||||
tools that can be used to establish tests and test conditions.
 | 
					tools that can be used to establish tests and test conditions.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* `Test Client`_
 | 
					* `Test Client`_
 | 
				
			||||||
* Fixtures_
 | 
					* Fixtures_
 | 
				
			||||||
  
 | 
					
 | 
				
			||||||
Test Client
 | 
					Test Client
 | 
				
			||||||
-----------
 | 
					-----------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -178,23 +178,23 @@ GET and POST requests on a URL, and observe the response that is received.
 | 
				
			|||||||
This allows you to test that the correct view is executed for a given URL,
 | 
					This allows you to test that the correct view is executed for a given URL,
 | 
				
			||||||
and that the view constructs the correct response.
 | 
					and that the view constructs the correct response.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
As the response is generated, the Test Client gathers details on the 
 | 
					As the response is generated, the Test Client gathers details on the
 | 
				
			||||||
Template and Context objects that were used to generate the response. These
 | 
					Template and Context objects that were used to generate the response. These
 | 
				
			||||||
Templates and Contexts are then provided as part of the response, and can be
 | 
					Templates and Contexts are then provided as part of the response, and can be
 | 
				
			||||||
used as test conditions.
 | 
					used as test conditions.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.. admonition:: Test Client vs Browser Automation?
 | 
					.. admonition:: Test Client vs Browser Automation?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    The Test Client is not intended as a replacement for Twill_, Selenium_, 
 | 
					    The Test Client is not intended as a replacement for Twill_, Selenium_,
 | 
				
			||||||
    or other browser automation frameworks - it is intended to allow 
 | 
					    or other browser automation frameworks - it is intended to allow
 | 
				
			||||||
    testing of the contexts and templates produced by a view, 
 | 
					    testing of the contexts and templates produced by a view,
 | 
				
			||||||
    rather than the HTML rendered to the end-user.
 | 
					    rather than the HTML rendered to the end-user.
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    A comprehensive test suite should use a combination of both: Test Client
 | 
					    A comprehensive test suite should use a combination of both: Test Client
 | 
				
			||||||
    tests to establish that the correct view is being called and that 
 | 
					    tests to establish that the correct view is being called and that
 | 
				
			||||||
    the view is collecting the correct context data, and Browser Automation
 | 
					    the view is collecting the correct context data, and Browser Automation
 | 
				
			||||||
    tests to check that user interface behaves as expected.
 | 
					    tests to check that user interface behaves as expected.
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
.. _Twill: http://twill.idyll.org/
 | 
					.. _Twill: http://twill.idyll.org/
 | 
				
			||||||
.. _Selenium: http://www.openqa.org/selenium/
 | 
					.. _Selenium: http://www.openqa.org/selenium/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -202,7 +202,7 @@ used as test conditions.
 | 
				
			|||||||
Making requests
 | 
					Making requests
 | 
				
			||||||
~~~~~~~~~~~~~~~
 | 
					~~~~~~~~~~~~~~~
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Creating an instance of ``Client`` (``django.test.client.Client``) requires 
 | 
					Creating an instance of ``Client`` (``django.test.client.Client``) requires
 | 
				
			||||||
no arguments at time of construction. Once constructed, the following methods
 | 
					no arguments at time of construction. Once constructed, the following methods
 | 
				
			||||||
can be invoked on the ``Client`` instance.
 | 
					can be invoked on the ``Client`` instance.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -220,11 +220,11 @@ can be invoked on the ``Client`` instance.
 | 
				
			|||||||
``post(path, data={})``
 | 
					``post(path, data={})``
 | 
				
			||||||
    Make a POST request on the provided ``path``. The key-value pairs in the
 | 
					    Make a POST request on the provided ``path``. The key-value pairs in the
 | 
				
			||||||
    data dictionary will be used to create the POST data payload. This payload
 | 
					    data dictionary will be used to create the POST data payload. This payload
 | 
				
			||||||
    will be transmitted with the mimetype ``multipart/form-data``. 
 | 
					    will be transmitted with the mimetype ``multipart/form-data``.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    However submitting files is a special case. To POST a file, you need only
 | 
					    However submitting files is a special case. To POST a file, you need only
 | 
				
			||||||
    provide the file field name as a key, and a file handle to the file you wish to 
 | 
					    provide the file field name as a key, and a file handle to the file you wish to
 | 
				
			||||||
    upload as a value. The Test Client will populate the two POST fields (i.e., 
 | 
					    upload as a value. The Test Client will populate the two POST fields (i.e.,
 | 
				
			||||||
    ``field`` and ``field_file``) required by FileField. For example::
 | 
					    ``field`` and ``field_file``) required by FileField. For example::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        c = Client()
 | 
					        c = Client()
 | 
				
			||||||
@@ -232,8 +232,8 @@ can be invoked on the ``Client`` instance.
 | 
				
			|||||||
        c.post('/customers/wishes/', {'name':'fred', 'attachment':f})
 | 
					        c.post('/customers/wishes/', {'name':'fred', 'attachment':f})
 | 
				
			||||||
        f.close()
 | 
					        f.close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    will result in the evaluation of a POST request on ``/customers/wishes/``, 
 | 
					    will result in the evaluation of a POST request on ``/customers/wishes/``,
 | 
				
			||||||
    with a POST dictionary that contains `name`, `attachment` (containing the 
 | 
					    with a POST dictionary that contains `name`, `attachment` (containing the
 | 
				
			||||||
    file name), and `attachment_file` (containing the file data). Note that you
 | 
					    file name), and `attachment_file` (containing the file data). Note that you
 | 
				
			||||||
    need to manually close the file after it has been provided to the POST.
 | 
					    need to manually close the file after it has been provided to the POST.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -245,48 +245,48 @@ can be invoked on the ``Client`` instance.
 | 
				
			|||||||
    call to ``login()`` stimulates the series of GET and POST calls required
 | 
					    call to ``login()`` stimulates the series of GET and POST calls required
 | 
				
			||||||
    to log a user into a @login_required protected view.
 | 
					    to log a user into a @login_required protected view.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    If login is possible, the final return value of ``login()`` is the response 
 | 
					    If login is possible, the final return value of ``login()`` is the response
 | 
				
			||||||
    that is generated by issuing a GET request on the protected URL. If login
 | 
					    that is generated by issuing a GET request on the protected URL. If login
 | 
				
			||||||
    is not possible, ``login()`` returns False.
 | 
					    is not possible, ``login()`` returns False.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Note that since the test suite will be executed using the test database, 
 | 
					    Note that since the test suite will be executed using the test database,
 | 
				
			||||||
    which contains no users by default. As a result, logins for your production
 | 
					    which contains no users by default. As a result, logins for your production
 | 
				
			||||||
    site will not work. You will need to create users as part of the test suite 
 | 
					    site will not work. You will need to create users as part of the test suite
 | 
				
			||||||
    to be able to test logins to your application. 
 | 
					    to be able to test logins to your application.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Testing Responses
 | 
					Testing Responses
 | 
				
			||||||
~~~~~~~~~~~~~~~~~
 | 
					~~~~~~~~~~~~~~~~~
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The ``get()``, ``post()`` and ``login()`` methods all return a Response 
 | 
					The ``get()``, ``post()`` and ``login()`` methods all return a Response
 | 
				
			||||||
object. This Response object has the following properties that can be used 
 | 
					object. This Response object has the following properties that can be used
 | 
				
			||||||
for testing purposes:
 | 
					for testing purposes:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ===============  ==========================================================
 | 
					    ===============  ==========================================================
 | 
				
			||||||
    Property         Description
 | 
					    Property         Description
 | 
				
			||||||
    ===============  ==========================================================
 | 
					    ===============  ==========================================================
 | 
				
			||||||
    ``status_code``  The HTTP status of the response. See RFC2616_ for a 
 | 
					    ``status_code``  The HTTP status of the response. See RFC2616_ for a
 | 
				
			||||||
                     full list of HTTP status codes.
 | 
					                     full list of HTTP status codes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ``content``      The body of the response. The is the final page 
 | 
					    ``content``      The body of the response. The is the final page
 | 
				
			||||||
                     content as rendered by the view, or any error message 
 | 
					                     content as rendered by the view, or any error message
 | 
				
			||||||
                     (such as the URL for a 302 redirect).
 | 
					                     (such as the URL for a 302 redirect).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ``template``     The Template instance that was used to render the final 
 | 
					    ``template``     The Template instance that was used to render the final
 | 
				
			||||||
                     content. Testing ``template.name`` can be particularly 
 | 
					                     content. Testing ``template.name`` can be particularly
 | 
				
			||||||
                     useful; if the template was loaded from a file, 
 | 
					                     useful; if the template was loaded from a file,
 | 
				
			||||||
                     ``template.name`` will be the file name that was loaded. 
 | 
					                     ``template.name`` will be the file name that was loaded.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                     If multiple templates were rendered, (e.g., if one 
 | 
					                     If multiple templates were rendered, (e.g., if one
 | 
				
			||||||
                     template includes another template),``template`` will 
 | 
					                     template includes another template),``template`` will
 | 
				
			||||||
                     be a list of Template objects, in the order in which 
 | 
					                     be a list of Template objects, in the order in which
 | 
				
			||||||
                     they were rendered.
 | 
					                     they were rendered.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ``context``      The Context that was used to render the template that 
 | 
					    ``context``      The Context that was used to render the template that
 | 
				
			||||||
                     produced the response content.
 | 
					                     produced the response content.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                     As with ``template``, if multiple templates were rendered 
 | 
					                     As with ``template``, if multiple templates were rendered
 | 
				
			||||||
                     ``context`` will be a list of Context objects, stored in 
 | 
					                     ``context`` will be a list of Context objects, stored in
 | 
				
			||||||
                     the order in which they were rendered. 
 | 
					                     the order in which they were rendered.
 | 
				
			||||||
    ===============  ==========================================================
 | 
					    ===============  ==========================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.. _RFC2616: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
 | 
					.. _RFC2616: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
 | 
				
			||||||
@@ -295,11 +295,11 @@ Exceptions
 | 
				
			|||||||
~~~~~~~~~~
 | 
					~~~~~~~~~~
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If you point the Test Client at a view that raises an exception, that exception
 | 
					If you point the Test Client at a view that raises an exception, that exception
 | 
				
			||||||
will be visible in the test case. You can then use a standard ``try...catch`` 
 | 
					will be visible in the test case. You can then use a standard ``try...catch``
 | 
				
			||||||
block, or ``unittest.TestCase.assertRaises()`` to test for exceptions.
 | 
					block, or ``unittest.TestCase.assertRaises()`` to test for exceptions.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The only exceptions that are not visible in a Test Case are ``Http404``, 
 | 
					The only exceptions that are not visible in a Test Case are ``Http404``,
 | 
				
			||||||
``PermissionDenied`` and ``SystemExit``. Django catches these exceptions 
 | 
					``PermissionDenied`` and ``SystemExit``. Django catches these exceptions
 | 
				
			||||||
internally and converts them into the appropriate HTTP responses codes.
 | 
					internally and converts them into the appropriate HTTP responses codes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Persistent state
 | 
					Persistent state
 | 
				
			||||||
@@ -307,8 +307,8 @@ Persistent state
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
The Test Client is stateful; if a cookie is returned as part of a response,
 | 
					The Test Client is stateful; if a cookie is returned as part of a response,
 | 
				
			||||||
that cookie is provided as part of the next request issued by that Client
 | 
					that cookie is provided as part of the next request issued by that Client
 | 
				
			||||||
instance. Expiry policies for these cookies are not followed; if you want 
 | 
					instance. Expiry policies for these cookies are not followed; if you want
 | 
				
			||||||
a cookie to expire, either delete it manually or create a new Client 
 | 
					a cookie to expire, either delete it manually or create a new Client
 | 
				
			||||||
instance (which will effectively delete all cookies).
 | 
					instance (which will effectively delete all cookies).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
There are two properties of the Test Client which are used to store persistent
 | 
					There are two properties of the Test Client which are used to store persistent
 | 
				
			||||||
@@ -323,25 +323,26 @@ part of a test condition.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    ``session``      A dictionary-like object containing session information.
 | 
					    ``session``      A dictionary-like object containing session information.
 | 
				
			||||||
                     See the `session documentation`_ for full details.
 | 
					                     See the `session documentation`_ for full details.
 | 
				
			||||||
 | 
					    ===============  ==========================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.. _`session documentation`: ../sessions/
 | 
					.. _`session documentation`: ../sessions/
 | 
				
			||||||
                     
 | 
					
 | 
				
			||||||
Example
 | 
					Example
 | 
				
			||||||
~~~~~~~
 | 
					~~~~~~~
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The following is a simple unit test using the Test Client::
 | 
					The following is a simple unit test using the Test Client::
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    import unittest
 | 
					    import unittest
 | 
				
			||||||
    from django.test.client import Client
 | 
					    from django.test.client import Client
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    class SimpleTest(unittest.TestCase):
 | 
					    class SimpleTest(unittest.TestCase):
 | 
				
			||||||
        def setUp(self):
 | 
					        def setUp(self):
 | 
				
			||||||
            # Every test needs a client
 | 
					            # Every test needs a client
 | 
				
			||||||
            self.client = Client()
 | 
					            self.client = Client()
 | 
				
			||||||
        def test_details(self):        
 | 
					        def test_details(self):
 | 
				
			||||||
            # Issue a GET request
 | 
					            # Issue a GET request
 | 
				
			||||||
            response = self.client.get('/customer/details/')
 | 
					            response = self.client.get('/customer/details/')
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
            # Check that the respose is 200 OK
 | 
					            # Check that the respose is 200 OK
 | 
				
			||||||
            self.failUnlessEqual(response.status_code, 200)
 | 
					            self.failUnlessEqual(response.status_code, 200)
 | 
				
			||||||
            # Check that the rendered context contains 5 customers
 | 
					            # Check that the rendered context contains 5 customers
 | 
				
			||||||
@@ -368,13 +369,13 @@ but you only want to run the animals unit tests, run::
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
When you run your tests, you'll see a bunch of text flow by as the test
 | 
					When you run your tests, you'll see a bunch of text flow by as the test
 | 
				
			||||||
database is created and models are initialized. This test database is
 | 
					database is created and models are initialized. This test database is
 | 
				
			||||||
created from scratch every time you run your tests. 
 | 
					created from scratch every time you run your tests.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
By default, the test database gets its name by prepending ``test_`` to 
 | 
					By default, the test database gets its name by prepending ``test_`` to
 | 
				
			||||||
the database name specified by the ``DATABASE_NAME`` setting; all other 
 | 
					the database name specified by the ``DATABASE_NAME`` setting; all other
 | 
				
			||||||
database settings will the same as they would be for the project normally.
 | 
					database settings will the same as they would be for the project normally.
 | 
				
			||||||
If you wish to use a name other than the default for the test database, 
 | 
					If you wish to use a name other than the default for the test database,
 | 
				
			||||||
you can use the ``TEST_DATABASE_NAME`` setting to provide a name. 
 | 
					you can use the ``TEST_DATABASE_NAME`` setting to provide a name.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Once the test database has been established, Django will run your tests.
 | 
					Once the test database has been established, Django will run your tests.
 | 
				
			||||||
If everything goes well, at the end you'll see::
 | 
					If everything goes well, at the end you'll see::
 | 
				
			||||||
@@ -447,7 +448,7 @@ arguments:
 | 
				
			|||||||
    The module list is the list of Python modules that contain the models to be
 | 
					    The module list is the list of Python modules that contain the models to be
 | 
				
			||||||
    tested. This is the same format returned by ``django.db.models.get_apps()``
 | 
					    tested. This is the same format returned by ``django.db.models.get_apps()``
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Verbosity determines the amount of notification and debug information that 
 | 
					    Verbosity determines the amount of notification and debug information that
 | 
				
			||||||
    will be printed to the console; `0` is no output, `1` is normal output,
 | 
					    will be printed to the console; `0` is no output, `1` is normal output,
 | 
				
			||||||
    and `2` is verbose output.
 | 
					    and `2` is verbose output.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -458,12 +459,12 @@ To assist in the creation of your own test runner, Django provides
 | 
				
			|||||||
a number of utility methods in the ``django.test.utils`` module.
 | 
					a number of utility methods in the ``django.test.utils`` module.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
``setup_test_environment()``
 | 
					``setup_test_environment()``
 | 
				
			||||||
    Performs any global pre-test setup, such as the installing the 
 | 
					    Performs any global pre-test setup, such as the installing the
 | 
				
			||||||
    instrumentation of the template rendering system. 
 | 
					    instrumentation of the template rendering system.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
``teardown_test_environment()``
 | 
					``teardown_test_environment()``
 | 
				
			||||||
    Performs any global post-test teardown, such as removing the instrumentation 
 | 
					    Performs any global post-test teardown, such as removing the instrumentation
 | 
				
			||||||
    of the template rendering system. 
 | 
					    of the template rendering system.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
``create_test_db(verbosity=1, autoclobber=False)``
 | 
					``create_test_db(verbosity=1, autoclobber=False)``
 | 
				
			||||||
    Creates a new test database, and run ``syncdb`` against it.
 | 
					    Creates a new test database, and run ``syncdb`` against it.
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user