If purchase happens to be installed before MRP is, the "buy" route is set by default on products *and* takes precedence over the MRP one (because created first and same sequence). This leads to purchase trying to buy products (which have no seller) instead of MRP trying to manufacture them, which is what we're trying to do & test. Fix by clearing the route_ids field before adding the MRP routes.
98 lines
2.7 KiB
ReStructuredText
98 lines
2.7 KiB
ReStructuredText
:banner: banners/testing_modules.jpg
|
|
|
|
.. _reference/testing:
|
|
|
|
|
|
===============
|
|
Testing Modules
|
|
===============
|
|
|
|
Odoo provides support for testing modules using unittest.
|
|
|
|
To write tests, simply define a ``tests`` sub-package in your module, it will
|
|
be automatically inspected for test modules. Test modules should have a name
|
|
starting with ``test_`` and should be imported from ``tests/__init__.py``,
|
|
e.g.
|
|
|
|
.. code-block:: text
|
|
|
|
your_module
|
|
|-- ...
|
|
`-- tests
|
|
|-- __init__.py
|
|
|-- test_bar.py
|
|
`-- test_foo.py
|
|
|
|
and ``__init__.py`` contains::
|
|
|
|
from . import test_foo, test_bar
|
|
|
|
.. warning::
|
|
|
|
test modules which are not imported from ``tests/__init__.py`` will not be
|
|
run
|
|
|
|
.. versionchanged:: 8.0
|
|
|
|
previously, the test runner would only run modules added to two lists
|
|
``fast_suite`` and ``checks`` in ``tests/__init__.py``. In 8.0 it will
|
|
run all imported modules
|
|
|
|
The test runner will simply run any test case, as described in the official
|
|
`unittest documentation`_, but Odoo provides a number of utilities and helpers
|
|
related to testing Odoo content (modules, mainly):
|
|
|
|
.. autoclass:: odoo.tests.common.TransactionCase
|
|
:members: browse_ref, ref
|
|
|
|
.. autoclass:: odoo.tests.common.SingleTransactionCase
|
|
:members: browse_ref, ref
|
|
|
|
.. autoclass:: odoo.tests.common.SavepointCase
|
|
|
|
.. autoclass:: odoo.tests.common.HttpCase
|
|
:members: browse_ref, ref, url_open, phantom_js
|
|
|
|
By default, tests are run once right after the corresponding module has been
|
|
installed. Test cases can also be configured to run after all modules have
|
|
been installed, and not run right after the module installation:
|
|
|
|
.. autofunction:: odoo.tests.common.at_install
|
|
|
|
.. autofunction:: odoo.tests.common.post_install
|
|
|
|
The most common situation is to use
|
|
:class:`~odoo.tests.common.TransactionCase` and test a property of a model
|
|
in each method::
|
|
|
|
class TestModelA(common.TransactionCase):
|
|
def test_some_action(self):
|
|
record = self.env['model.a'].create({'field': 'value'})
|
|
record.some_action()
|
|
self.assertEqual(
|
|
record.field,
|
|
expected_field_value)
|
|
|
|
# other tests...
|
|
|
|
.. autoclass:: odoo.tests.common.Form
|
|
:members:
|
|
|
|
.. autoclass:: odoo.tests.common.M2MProxy
|
|
:members: add, remove, clear
|
|
|
|
.. autoclass:: odoo.tests.common.O2MProxy
|
|
:members: new, edit, remove
|
|
|
|
Running tests
|
|
-------------
|
|
|
|
Tests are automatically run when installing or updating modules if
|
|
:option:`--test-enable <odoo-bin --test-enable>` was enabled when starting the
|
|
Odoo server.
|
|
|
|
As of Odoo 8, running tests outside of the install/update cycle is not
|
|
supported.
|
|
|
|
.. _unittest documentation: https://docs.python.org/2/library/unittest.html
|