使用Model Mommy测试登录

问题描述 投票:1回答:2

我在功能测试中测试登录时遇到问题。我正在使用模型妈妈用密码创建一个用户调用Megan但是我的测试仍然没有通过,因为当发送信息时它会抛出并在html页面上输入错误“请输入正确的用户名和密码。请注意两者字段可能区分大小写。“所以我怀疑测试用户没有被创建或类似的东西。

功能测试:

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.朋友:

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'),
]
django django-testing django-tests model-mommy
2个回答
3
投票

我相信你的代码目前还没有工作,因为mommy.make没有哈希密码。在这种情况下,我没有看到使用mommy的任何优势,所以使用常规的create_user方法应该没问题。

self.user = User.objects.create_user 
    username='Megan',
    email='[email protected]',
    password = 'password',
)

这将确保密码正确散列。

如果你仍然想使用模型妈妈以便它为其他模型创建外键,你可以调用set_password来正确地散列密码。感谢mislavcimpersak在他们的回答中建议这一点。

    self.user = mommy.make('User', 
    username='Megan',
    is_active = True)
    self.user.set_password('password')
    self.save()

6
投票

如果你仍然坚持使用模特妈妈:

class NewUserTest(LiveServerTestCase):
    def setUp(self):
        self.user = mommy.make('User', 
            username='Megan',
            is_active = True)
        self.user.set_password('password')
        self.user.save()
© www.soinside.com 2019 - 2024. All rights reserved.