| | |
| | | |
| | | See also :ref:`including_configuration` |
| | | |
| | | Let's demonstrate this by showing an integration test for a view. |
| | | |
| | | Given the following view definition, which assumes that your application's |
| | | :term:`package` name is ``myproject``, and within that :term:`package` there |
| | | exists a module ``views``, which in turn contains a :term:`view` function named |
| | | ``my_view``: |
| | | |
| | | .. literalinclude:: MyProject/myproject/views.py |
| | | :linenos: |
| | | :lines: 1-6 |
| | | :language: python |
| | | |
| | | You'd then create a ``tests`` module within your ``myproject`` package, |
| | | containing the following test code: |
| | | |
| | | .. literalinclude:: MyProject/myproject/tests.py |
| | | :linenos: |
| | | :pyobject: ViewIntegrationTests |
| | | :language: python |
| | | |
| | | Writing unit tests that use the :class:`~pyramid.config.Configurator` API to |
| | | set up the right "mock" registrations is often preferred to creating |
| | | integration tests. Unit tests will run faster (because they do less for each |
| | |
| | | |
| | | Regardless of which testing :term:`package` you use, ensure to add a |
| | | ``tests_require`` dependency on that package to your application's |
| | | ``setup.py`` file: |
| | | ``setup.py`` file. Using the project ``MyProject`` generated by the starter |
| | | scaffold as described in :doc:`project`, we would insert the following code immediately following the |
| | | ``requires`` block in the file ``MyProject/setup.py``. |
| | | |
| | | .. literalinclude:: MyProject/setup.py |
| | | :linenos: |
| | | :emphasize-lines: 26-28,48 |
| | | :language: python |
| | | .. code-block:: ini |
| | | :linenos: |
| | | :lineno-start: 11 |
| | | :emphasize-lines: 8- |
| | | |
| | | Let us assume your :term:`package` is named ``myproject`` which contains a |
| | | ``views`` module, which in turn contains a :term:`view` function ``my_view`` |
| | | that returns a HTML body when the root URL is invoked: |
| | | requires = [ |
| | | 'pyramid', |
| | | 'pyramid_chameleon', |
| | | 'pyramid_debugtoolbar', |
| | | 'waitress', |
| | | ] |
| | | |
| | | test_requires = [ |
| | | 'webtest', |
| | | ] |
| | | |
| | | Remember to change the dependency. |
| | | |
| | | .. code-block:: ini |
| | | :linenos: |
| | | :lineno-start: 39 |
| | | :emphasize-lines: 2 |
| | | |
| | | install_requires=requires, |
| | | tests_require=test_requires, |
| | | test_suite="myproject", |
| | | |
| | | As always, whenever you change your dependencies, make sure to run the |
| | | following command. |
| | | |
| | | .. code-block:: bash |
| | | |
| | | $VENV/bin/python setup.py develop |
| | | |
| | | In your ``MyPackage`` project, your :term:`package` is named ``myproject`` |
| | | which contains a ``views`` module, which in turn contains a :term:`view` |
| | | function ``my_view`` that returns an HTML body when the root URL is invoked: |
| | | |
| | | .. literalinclude:: MyProject/myproject/views.py |
| | | :linenos: |
| | | :language: python |
| | | |
| | | Then the following example functional test demonstrates invoking the above |
| | | The following example functional test demonstrates invoking the above |
| | | :term:`view`: |
| | | |
| | | .. literalinclude:: MyProject/myproject/tests.py |
| | |
| | | When this test is run, each test method creates a "real" :term:`WSGI` |
| | | application using the ``main`` function in your ``myproject.__init__`` module, |
| | | using :term:`WebTest` to wrap that WSGI application. It assigns the result to |
| | | ``self.testapp``. In the test named ``test_root``. The ``TestApp``'s ``GET`` |
| | | ``self.testapp``. In the test named ``test_root``, the ``TestApp``'s ``GET`` |
| | | method is used to invoke the root URL. Finally, an assertion is made that the |
| | | returned HTML contains the text ``MyProject``. |
| | | returned HTML contains the text ``Pyramid``. |
| | | |
| | | See the :term:`WebTest` documentation for further information about the methods |
| | | available to a :class:`webtest.app.TestApp` instance. |