Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django LiveTestServerCase not using proper settings

In a Django project I'm using selenium to run some UI tests, using a LiveServerTestCase.

One of my test cases is failing, and when using the Firefox driver I can see a page throwing "Server Error (500)", which means DEBUG is set to False which is not the case when I run the local development server.

How is the test server being launched? Why is not using my settings which define DEBUG = True?

Other URLs (such as the homepage URL) return fine, so the server is working. But I just don't get why it's not showing debug information, and which settings it's using.

My test case for reference:

class LoginTest(LiveServerTestCase):

    @classmethod
    def setUpClass(cls):
        try:
            from selenium.webdriver import PhantomJS
            cls.selenium = PhantomJS()
        except:
            from selenium.webdriver.firefox.webdriver import WebDriver
            cls.selenium = WebDriver()
        super(LoginTest, cls).setUpClass()

    @classmethod
    def tearDownClass(cls):
        cls.selenium.quit()
        super(LoginTest, cls).tearDownClass()

    def test_fb_login(self):
        self.selenium.get('%s%s' % (self.live_server_url, reverse('account_login')))
        # TEST SERVER RETURNS 500 ON THIS URL WITH NO DEBUG INFO
like image 628
Yuval Adam Avatar asked Dec 02 '13 11:12

Yuval Adam


2 Answers

According to Testing Django Application - Django Documentation:

Regardless of the value of the DEBUG setting in your configuration file, all Django tests run with DEBUG=False. This is to ensure that the observed output of your code matches what will be seen in a production setting.


It should still be possible to override this using:

with self.settings(DEBUG=True):
    ...

Although I wouldn't recommend it, it can still be useful from time to time. (Thomas Orozco's comment)

like image 184
falsetru Avatar answered Oct 21 '22 13:10

falsetru


You can also change your settings in TestCase setUp() method.

from django.conf import settings

class MyTest(LiveServerTestCase):
    def setUp(self):
        # Change settings here
        settings.DEBUG = True

        # ...
like image 29
Wasco Avatar answered Oct 21 '22 12:10

Wasco