diff --git a/src/blenderbim/docs/devs/running_tests.rst b/src/blenderbim/docs/devs/running_tests.rst index 165ddd1027..e2559750c5 100644 --- a/src/blenderbim/docs/devs/running_tests.rst +++ b/src/blenderbim/docs/devs/running_tests.rst @@ -6,7 +6,8 @@ Running tests The BlenderBIM Add-on has three layers of tests for each of its three technology layers. These roughly form a test pyramid, moving from many abstract domain logic tests, to low-level concrete unit tests, to a minimal number of UI and -smoke tests. These tests use ``pytest`` as the test framework and runner. +smoke tests. These tests use ``pytest`` as the test framework and runner, so you +will need to install ``pytest``. All development is expected to use test driven development, and so we expect test coverage to be 100% where it is technically possible to test. @@ -39,8 +40,8 @@ similar. Tool tests ---------- -The tool layer tests actual concrete functions. These have the following -dependencies: +The tool layer tests actual concrete functions. You will need to install the +following dependencies: * pytest-blender, accessible to your system's Python * Blender executable, accessible to pytest-blender on your system's Python @@ -51,6 +52,16 @@ dependencies: You can install the dependencies by running the ``scripts/setup_pytest.py`` script in Blender. +.. warning:: + + The ``scripts/setup_pytest.py`` may not work for all operating systems and + installation environments. In this case, you may be required to install the + dependencies manually. + + Please be aware that some Blender may come packaged with its own Python, + which may be separate to the Python installation on your system. Be sure to + install the dependencies to the correct Python environment. + Then, run the tests. This will launch Blender headlessly and check the behaviour of all concrete functions. diff --git a/src/blenderbim/scripts/setup_pytest.py b/src/blenderbim/scripts/setup_pytest.py index 262f97587f..2e2f6eea51 100644 --- a/src/blenderbim/scripts/setup_pytest.py +++ b/src/blenderbim/scripts/setup_pytest.py @@ -16,16 +16,40 @@ # You should have received a copy of the GNU General Public License # along with BlenderBIM Add-on. If not, see . -import subprocess import sys -from pathlib import Path +import subprocess + +print("Here are the detected system paths:") +print(sys.path) py_exec = str(sys.executable) -lib = Path(py_exec).parent.parent / "lib" + +print("Detected executable:", py_exec) subprocess.call([py_exec, "-m", "ensurepip", "--user"]) -subprocess.call([py_exec, "-m", "pip", "install", "--upgrade", "pip"]) -subprocess.call([py_exec, "-m", "pip", "install", f"--target={str(lib)}", "pytest"]) -subprocess.call([py_exec, "-m", "pip", "install", f"--target={str(lib)}", "pytest-blender"]) -subprocess.call([py_exec, "-m", "pip", "install", f"--target={str(lib)}", "pytest-bdd"]) -subprocess.call([py_exec, "-m", "pip", "install", f"--target={str(lib)}", "pygments"]) +subprocess.call([py_exec, "-m", "pip", "install", "--upgrade", "pip"]) + +sys_paths = [p for p in sys.path if "site-packages" in p] +if sys_paths: + print("Detected installation directory:", sys_paths[-1]) + subprocess.call([py_exec, "-m", "pip", "install", f"--target={sys_paths[-1]}", "pytest"]) + subprocess.call([py_exec, "-m", "pip", "install", f"--target={sys_paths[-1]}", "pytest-bdd"]) + subprocess.call([py_exec, "-m", "pip", "install", f"--target={sys_paths[-1]}", "pytest-blender"]) + subprocess.call([py_exec, "-m", "pip", "install", f"--target={sys_paths[-1]}", "pygments"]) +else: + print("Could not detect installation directory. Good luck.") + subprocess.call([py_exec, "-m", "pip", "install", "pytest"]) + subprocess.call([py_exec, "-m", "pip", "install", "pytest-bdd"]) + subprocess.call([py_exec, "-m", "pip", "install", "pytest-blender"]) + subprocess.call([py_exec, "-m", "pip", "install", "pygments"]) + +try: + import pytest + import pytest_bdd + import pytest_blender + import pygments + + print("Test dependency installation was successful!") +except Exception as e: + print("Installation failed :(") + print(e)