我有一个测试,尝试在登录Django应用程序的地方运行:
class FirefoxTestCases(StaticLiveServerTestCase):
def setUp(self):
data_setup.basic_apps_setup(self)
self.browser = webdriver.Firefox()
def tearDown(self):
self.browser.quit()
def test_log_in_with_no_apps_displays_firefox(self):
# Opening the link we want to test
self.browser.get(self.live_server_url)
assert "log in" in self.browser.page_source
time.sleep(2)
self.browser.find_element_by_id("id_username").send_keys("userone")
self.browser.find_element_by_id("id_password").send_keys("test")
self.browser.find_element_by_id("log_in").click()
time.sleep(2)
# Check the returned result
assert "Something appears to be missing" in self.browser.page_source
这样做-实际上不允许登录,因为在我的设置中,我具有特定的ALLOWED_HOSTS
设置。
运行此测试时是否可以访问ALLOWED_HOSTS设置,以便在测试时允许登录?
答案 0 :(得分:2)
问题是在settings.py
中设置了SESSION_COOKIE_DOMAIN
。
例如:
SESSION_COOKIE_DOMAIN = ".company.com"
Django LiveServerTestCase仅执行localhost
(据我所知是不可更改的)。因此,localhost
的网站无法识别登录的用户Cookie
为了解决此问题-对于需要交互性(例如登录)的测试,您可以像这样override that setting:
from django.test.utils import override_settings
...
...
@override_settings(SESSION_COOKIE_DOMAIN="")
def test_log_in_with_no_apps_displays_firefox(self):
# Opening the link we want to test
self.browser.get(self.live_server_url)
assert "log in" in self.browser.page_source
time.sleep(2)
self.browser.find_element_by_id("id_username").send_keys("userone")
self.browser.find_element_by_id("id_password").send_keys("test")
self.browser.find_element_by_id("log_in").click()
time.sleep(2)
# Check the returned result
assert "Something appears to be missing" in self.browser.page_source
此测试将覆盖该设置,并且用户将能够成功登录而不会出现问题。
由于Cookie问题,网站通常具有的所有其他功能现在已解决。