使用模型妈妈测试登录
Testing Login with Model Mommy
我在功能测试中测试登录时遇到问题。我正在使用模型妈妈创建一个使用密码的用户调用 Megan,但我的测试仍然没有通过,因为当信息被发送时它在 "Please enter a correct username and password. Note that both fields may be case-sensitive." 的 html 页面上抛出错误所以我怀疑没有创建测试用户或类似的东西。
functional_test:
from django.test import LiveServerTestCase
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from model_mommy import mommy
from django.contrib.auth.models import User
class NewUserTest(LiveServerTestCase):
def setUp(self):
self.user = mommy.make('User',
username='Megan',
password = 'password',
is_active = True)
self.browser = webdriver.Firefox()
self.browser.implicitly_wait(15)
def tearDown(self):
self.browser.quit()
def test_user_can_start_a_new_movement(self):
#some code
self.browser.get(self.live_server_url)
self.assertIn('P2', self.browser.title)
#Megan first logs in
login_link = self.browser.find_element_by_link_text('Log In')
login_link.click()
#Megan then puts in her user information
username = self.browser.find_element_by_id('id_username')
password = self.browser.find_element_by_id('id_password')
submit = self.browser.find_element_by_id('id_submit')
username.send_keys('Megan')
password.send_keys('password')
submit.click()
login.html
{% extends 'base.html' %}
{% block body_block %}
<form action="/accounts/login/" method="POST">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="submit" id='id_submit'>
</form>
{% endblock %}
users.urls.py:
from django.conf.urls import url, patterns
from django.contrib.auth.views import login, logout
from movements import views
urlpatterns = [
url(r'^login/', login,
{'template_name': 'login.html'}, name='login'),
]
我认为您的代码目前无法正常工作,因为 mommy.make
没有对密码进行哈希处理。在这种情况下,我看不出使用 mommy
有任何优势,因此使用常规 create_user
方法应该没问题。
self.user = User.objects.create_user
username='Megan',
email='megan@example.com',
password = 'password',
)
这将确保正确散列密码。
如果您仍想使用模型 mommy 以便它为其他模型创建外键,您可以调用 set_password
来正确散列密码。感谢 mislavcimpersak 在他们的回答中提出这个建议。
self.user = mommy.make('User',
username='Megan',
is_active = True)
self.user.set_password('password')
self.save()
如果你还坚持用模特妈咪:
class NewUserTest(LiveServerTestCase):
def setUp(self):
self.user = mommy.make('User',
username='Megan',
is_active = True)
self.user.set_password('password')
self.user.save()
我在功能测试中测试登录时遇到问题。我正在使用模型妈妈创建一个使用密码的用户调用 Megan,但我的测试仍然没有通过,因为当信息被发送时它在 "Please enter a correct username and password. Note that both fields may be case-sensitive." 的 html 页面上抛出错误所以我怀疑没有创建测试用户或类似的东西。
functional_test:
from django.test import LiveServerTestCase
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from model_mommy import mommy
from django.contrib.auth.models import User
class NewUserTest(LiveServerTestCase):
def setUp(self):
self.user = mommy.make('User',
username='Megan',
password = 'password',
is_active = True)
self.browser = webdriver.Firefox()
self.browser.implicitly_wait(15)
def tearDown(self):
self.browser.quit()
def test_user_can_start_a_new_movement(self):
#some code
self.browser.get(self.live_server_url)
self.assertIn('P2', self.browser.title)
#Megan first logs in
login_link = self.browser.find_element_by_link_text('Log In')
login_link.click()
#Megan then puts in her user information
username = self.browser.find_element_by_id('id_username')
password = self.browser.find_element_by_id('id_password')
submit = self.browser.find_element_by_id('id_submit')
username.send_keys('Megan')
password.send_keys('password')
submit.click()
login.html
{% extends 'base.html' %}
{% block body_block %}
<form action="/accounts/login/" method="POST">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="submit" id='id_submit'>
</form>
{% endblock %}
users.urls.py:
from django.conf.urls import url, patterns
from django.contrib.auth.views import login, logout
from movements import views
urlpatterns = [
url(r'^login/', login,
{'template_name': 'login.html'}, name='login'),
]
我认为您的代码目前无法正常工作,因为 mommy.make
没有对密码进行哈希处理。在这种情况下,我看不出使用 mommy
有任何优势,因此使用常规 create_user
方法应该没问题。
self.user = User.objects.create_user
username='Megan',
email='megan@example.com',
password = 'password',
)
这将确保正确散列密码。
如果您仍想使用模型 mommy 以便它为其他模型创建外键,您可以调用 set_password
来正确散列密码。感谢 mislavcimpersak 在他们的回答中提出这个建议。
self.user = mommy.make('User',
username='Megan',
is_active = True)
self.user.set_password('password')
self.save()
如果你还坚持用模特妈咪:
class NewUserTest(LiveServerTestCase):
def setUp(self):
self.user = mommy.make('User',
username='Megan',
is_active = True)
self.user.set_password('password')
self.user.save()