If you're using py.test
to run the tests, it won't find the application as you must have not installed it. You can use python -m pytest
to run your tests, as python will auto-add your current working directory to your PATH.
Hence, using python -m pytest ..
would work if you're doing it in the src
directory
The structure that I normally use is:
root
├── packagename
│ ├── __init__.py
│ └── ...
└── tests
└── ...
This way when I simply run python -m pytest
in the root directory it works fine. Read more at: https://mcmap.net/q/86064/-path-issue-with-pytest-39-importerror-no-module-named-39
Second option, if you still want to run this with py.test
you can use:
PYTHONPATH=src/ py.test
and run it from the root. This simply adds the src folder to your PYTHONPATH and now your tests will know where to find the packagename
package.
The third option is to use pip with -e
to install your package in the editable mode. This creates a link to the packagename
folder and installs it with pip - so any modification done in packagename
is immediately reflected in pip's installation (as it is a link). The issue with this is that you need to redo the installation if you move the repo and need to keep track of which one is installed if you have more than 1 clones/packages.
src/
is to prevent it from being imported. You want to test the installed package, not the development folder. – Legislative