Simple package for running isolated Django tests from within virtualenv
For those of you who are pressed for time. Create a .py file named anything
you like--we'll call it run_tests.py--at the top level of your virtualenv
environment (i.e., the parent of bin/), and add the following:
from d51.django.virtualenv.test_runner import run_tests
def main():
settings = {
'INSTALLED_APPS': (
... your app(s) here ...
),
}
run_tests(settings, 'tagging')
if __name__ == '__main__':
main()
Now all you need to do is create your virtual environment (don't worry, this gets mad at you if you didn't), install any dependencies you have for your package, then run this file.
There's no need to activate virtualenv as you would normally,
d51.django.virtualenv.test_runner takes care of that for you.
There's more to this than that, but that's all you need to get started. The
VirtualEnvironmentTestRunner class is the work-horse here. The run_tests
that you imported above is an instance of that class.
You need to directly instantiate VirtualEnvironmentTestRunner and provide it
with a new caller parameter. caller is a module which, by default, is
equal to the __main__ module. You can provide your own module, if you like.
It assumes you have a standard virtualenv layout with that module existing in
parent of virtualenv's bin/ directory. Namely, it needs:
... your run_tests.py file ...
bin/
activate_this.py
If that is not your structure, you need to sub-class
VirtualEnvironmentTestRunner and provide your own activation_file
method/property.
The default error message is along the lines of:
Error! You haven't initialized your virtual environment first.
Please run the following to initialize the environment:
virtualenv .
pip install -E . -r ./requirements.txt
To provide a different message, instantiate VirtualEnvTestRunner directly and
provide a new error_message keyword argument.
I know, I know. There is none yet, but the fun thing is that since this runs tests, you know it works if your tests actually run. :-)