diff --git a/django/db/backends/sqlite3/creation.py b/django/db/backends/sqlite3/creation.py
index a6e3155aa81..9f1598e3ee2 100644
--- a/django/db/backends/sqlite3/creation.py
+++ b/django/db/backends/sqlite3/creation.py
@@ -11,14 +11,16 @@ class DatabaseCreation(BaseDatabaseCreation):
 
     def _get_test_db_name(self):
         test_database_name = self.connection.settings_dict['TEST']['NAME']
+        can_share_in_memory_db = self.connection.features.can_share_in_memory_db
         if test_database_name and test_database_name != ':memory:':
-            if 'mode=memory' in test_database_name:
+            if 'mode=memory' in test_database_name and not can_share_in_memory_db:
                 raise ImproperlyConfigured(
-                    "Using `mode=memory` parameter in the database name is not allowed, "
+                    "Using a shared memory database with `mode=memory` in the "
+                    "database name is not supported in your environment, "
                     "use `:memory:` instead."
                 )
             return test_database_name
-        if self.connection.features.can_share_in_memory_db:
+        if can_share_in_memory_db:
             return 'file:memorydb_%s?mode=memory&cache=shared' % self.connection.alias
         return ':memory:'
 
diff --git a/docs/releases/1.8.6.txt b/docs/releases/1.8.6.txt
index 9292d7835bf..15b85a66c8d 100644
--- a/docs/releases/1.8.6.txt
+++ b/docs/releases/1.8.6.txt
@@ -11,3 +11,6 @@ Bugfixes
 
 * Fixed a regression causing ``ModelChoiceField`` to ignore
   ``prefetch_related()`` on its queryset (:ticket:`25496`).
+
+* Allowed "mode=memory" in SQLite test database name if supported
+  (:ticket:`12118`).
diff --git a/tests/backends/tests.py b/tests/backends/tests.py
index 39a2654a778..6237e860fb2 100644
--- a/tests/backends/tests.py
+++ b/tests/backends/tests.py
@@ -142,6 +142,30 @@ class SQLiteTests(TestCase):
                 models.Item.objects.all().aggregate,
                 **{'complex': aggregate('last_modified') + aggregate('last_modified')})
 
+    def test_memory_db_test_name(self):
+        """
+        A named in-memory db should be allowed where supported.
+        """
+        from django.db.backends.sqlite3.base import DatabaseWrapper
+        settings_dict = {
+            'TEST': {
+                'NAME': 'file:memorydb_test?mode=memory&cache=shared',
+            }
+        }
+        wrapper = DatabaseWrapper(settings_dict)
+        creation = wrapper.creation
+        if creation.connection.features.can_share_in_memory_db:
+            expected = creation.connection.settings_dict['TEST']['NAME']
+            self.assertEqual(creation._get_test_db_name(), expected)
+        else:
+            msg = (
+                "Using a shared memory database with `mode=memory` in the "
+                "database name is not supported in your environment, "
+                "use `:memory:` instead."
+            )
+            with self.assertRaisesMessage(ImproperlyConfigured, msg):
+                creation._get_test_db_name()
+
 
 @unittest.skipUnless(connection.vendor == 'postgresql', "Test only for PostgreSQL")
 class PostgreSQLTests(TestCase):