I'm setting up a directory structure for my Django app to separate functional and unit tests. I am using nose as the test runner for my Django project.
At the root of the Django project, I have a folder called "tests" that has this structure:
tests
├── __init__.py
├── functional
│ ├── __init__.py
└── unit
├── __init__.py
├── data.py
├── tests.py
If I want to run just the unit tests, should I not be able to use the following from the project root:
$ nosetests tests.unit
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
As you can see, this doesn't find the tests in the tests.py file.
However, when I run using the directory structure, the tests are found as they should be:
$ nosetests tests/unit/
E
# .. Some errors I expected because settings are not initialized when called this way
-----------------
Ran 1 test in 0.001s
FAILED (errors=1)
What am I missing? My main issue is that I have a setup
function in tests.unit.__init__.py
that should be called for creating the data in the test DB for the upcoming tests.
Thanks
This all depends on what kind of code is in
tests/unit/__init__.py
When you say
You are pointing to
unit/__init__.py
not the directoryunit/
thus if you had no tests in your__init__.py
module then nothing would be run. So it is understandable when you say you used the directory path and then your tests started working.You mention
It is likely that although you have a setup function in
__init__.py
you may have not ever imported your test functions into__init__.py
One quick fix to this would be to add this line in
__init__.py
That said it is really not very wise to be putting any code in
__init__.py
at all and if you have code that returns some kind of configuration data I would recommend creating a new library module with functions that will return configuration data to your tests