diff --git a/.gitignore b/.gitignore
index 659d9c69c125a52defc6ec55d8efd995afdfafb1..377e82b5c3ea040a0f2485e78e1599233d2a5349 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,3 +10,4 @@ media
 .vscode
 local_settings.py
 arkindex/iiif-users/
+.coverage
diff --git a/arkindex/project/settings.py b/arkindex/project/settings.py
index 1c3c6703437ebe51b05fe0df448004ecebfaeb08..77293428324f147246884ceb295bca4cdb8b53dd 100644
--- a/arkindex/project/settings.py
+++ b/arkindex/project/settings.py
@@ -52,6 +52,7 @@ INSTALLED_APPS = [
     'rest_framework',
     'rest_framework.authtoken',
     'webpack_loader',
+    'django_nose',
 
     # Our apps
     'arkindex.images',
@@ -333,6 +334,13 @@ if os.environ.get('EMAIL_HOST'):
 else:
     EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
 
+# Unit tests runner
+TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
+NOSE_ARGS = [
+    '--with-coverage',
+    '--cover-package=arkindex',
+]
+
 # Local settings
 try:
     from .local_settings import * # noqa
diff --git a/requirements.txt b/requirements.txt
index 47f9c1391f4c1d99f96573df956b5afea930a1ff..c4d73f1e8e95b228c963e96bbd5e75ad72f44180 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -4,6 +4,7 @@ certifi==2017.7.27.1
 chardet==3.0.4
 Django==2.1
 django-enumfields==0.10.0
+django-nose==1.4.5
 djangorestframework==3.7.1
 django-webpack-loader==0.5.0
 elasticsearch==6.2.0
@@ -13,12 +14,13 @@ idna==2.6
 ijson==2.3
 jdcal==1.3
 lxml==4.2.3
+nose==1.3.7
 olefile==0.44
 openpyxl==2.4.9
 Pillow==4.3.0
 psycopg2==2.7.3.2
-python-magic==0.4.15
 python-Levenshtein==0.12.0
+python-magic==0.4.15
 python-memcached==1.59
 pytz==2017.2
 redis==2.10.6