Provide a way to disable static files serving in the live server test case. (#603)

This allows it to be turned off (it's on by default)
This commit is contained in:
Artem Malyshev 2017-04-13 00:01:25 +03:00 committed by Andrew Godwin
parent 31cd68c89b
commit 5648da5d34
2 changed files with 23 additions and 4 deletions

View File

@ -2,6 +2,7 @@ import multiprocessing
import django import django
from daphne.server import Server from daphne.server import Server
from django.apps import apps
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured
from django.db import connections from django.db import connections
from django.db.utils import load_backend from django.db.utils import load_backend
@ -67,13 +68,14 @@ class ProcessSetup(multiprocessing.Process):
class WorkerProcess(ProcessSetup): class WorkerProcess(ProcessSetup):
def __init__(self, is_ready, n_threads, overridden_settings, def __init__(self, is_ready, n_threads, overridden_settings,
modified_settings, databases): modified_settings, databases, serve_static):
self.is_ready = is_ready self.is_ready = is_ready
self.n_threads = n_threads self.n_threads = n_threads
self.overridden_settings = overridden_settings self.overridden_settings = overridden_settings
self.modified_settings = modified_settings self.modified_settings = modified_settings
self.databases = databases self.databases = databases
self.serve_static = serve_static
super(WorkerProcess, self).__init__() super(WorkerProcess, self).__init__()
self.daemon = True self.daemon = True
@ -82,9 +84,11 @@ class WorkerProcess(ProcessSetup):
try: try:
self.common_setup() self.common_setup()
channel_layers = ChannelLayerManager() channel_layers = ChannelLayerManager()
channel_layers[DEFAULT_CHANNEL_LAYER].router.check_default( check_default = channel_layers[DEFAULT_CHANNEL_LAYER].router.check_default
http_consumer=StaticFilesConsumer(), if self.serve_static and apps.is_installed('django.contrib.staticfiles'):
) check_default(http_consumer=StaticFilesConsumer())
else:
check_default()
if self.n_threads == 1: if self.n_threads == 1:
self.worker = Worker( self.worker = Worker(
channel_layer=channel_layers[DEFAULT_CHANNEL_LAYER], channel_layer=channel_layers[DEFAULT_CHANNEL_LAYER],
@ -153,6 +157,7 @@ class ChannelLiveServerTestCase(TransactionTestCase):
ProtocolServerProcess = DaphneProcess ProtocolServerProcess = DaphneProcess
WorkerProcess = WorkerProcess WorkerProcess = WorkerProcess
worker_threads = 1 worker_threads = 1
serve_static = True
@property @property
def live_server_url(self): def live_server_url(self):
@ -204,6 +209,7 @@ class ChannelLiveServerTestCase(TransactionTestCase):
self._overridden_settings, self._overridden_settings,
self._modified_settings, self._modified_settings,
connections.databases, connections.databases,
self.serve_static,
) )
self._worker_process.start() self._worker_process.start()
worker_ready.wait() worker_ready.wait()

View File

@ -325,3 +325,16 @@ infrastructure is ready default web browser will be also started. You
can open your website in the real browser which can execute JavaScript can open your website in the real browser which can execute JavaScript
and operate on WebSockets. ``live_server_ws_url`` property is also and operate on WebSockets. ``live_server_ws_url`` property is also
provided if you decide to run messaging directly from Python. provided if you decide to run messaging directly from Python.
By default live server test case will serve static files. To disable
this feature override `serve_static` class attribute.
.. code:: python
class IntegrationTest(ChannelLiveServerTestCase):
serve_static = False
def test_websocket_message(self):
# JS and CSS are not available in this test.
...