gpt4 book ai didi

python - 如何使用 Factory_Boy 创建管理员用户?

转载 作者:IT老高 更新时间:2023-10-28 20:30:50 26 4
gpt4 key购买 nike

我是一个相对的 Django 初学者,刚刚开始为我的项目做一些测试。我想要做的是使用登录到 Django Admin 站点的 selenium 构建一个功能测试。

我第一次学习本教程 http://www.tdd-django-tutorial.com/tutorial/1/并使用fixtures 和dumpdata 使管理员帐户信息可用于测试应用程序(这将创建一个新数据库)。这很好用。

然后我想看看我是否可以使用 factory-boy 做同样的事情更换固定装置。工厂男孩通过在 tests.py 文件中实例化必要的对象来工作,这对我来说似乎更干净。不知何故,我无法让它工作,而且 Factory_boy 文档也没有太大帮助......

这是我的测试.py

from django.test import LiveServerTestCase
from django.contrib.auth.models import User
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import factory

class UserFactory(factory.Factory):
FACTORY_FOR = User

username = 'jeff'
password = 'pass'
is_superuser = True

class AdminTest(LiveServerTestCase):

def setUp(self):
self.browser = webdriver.Firefox()

def tearDown(self):
self.browser.quit()

def test_if_admin_login_is_possible(self):
jeff = UserFactory.create()

# Jeff opens the browser and goes to the admin page
self.browser = webdriver.Firefox()
self.browser.get(self.live_server_url + '/admin/')

# Jeff sees the familiar 'Django Administration' heading
body = self.browser.find_element_by_tag_name('body')
self.assertIn('Django administration', body.text)

# Jeff types in his username and password and hits return
username_field = self.browser.find_element_by_name('username')
username_field.send_keys(jeff.username)
password_field = self.browser.find_element_by_name('password')
password_field.send_keys(jeff.password)
password_field.send_keys(Keys.RETURN)

# Jeff finds himself on the 'Site Administration' page
body = self.browser.find_element_by_tag_name('body')
self.assertIn('Site administration', body.text)

self.fail('Fail...')

这无法登录,因为它没有创建有效的管理员帐户。我怎么能用 factory-boy 做到这一点?有可能还是我需要为此使用固定装置?

(在这篇文章中,有些人建议固定装置是必要的,但工厂男孩没有出现:How to create admin user in django tests.py。我还尝试了相同答案底部建议的解决方案:https://stackoverflow.com/a/3495219/1539688。它不适用于我……)

最佳答案

如果你继承 factory.DjangoModelFactory 它应该为你保存用户对象。请参阅 PostGenerationMethodCall 下的注释部分.那么你只需要做到以下几点:

class UserFactory(factory.DjangoModelFactory):
FACTORY_FOR = User

email = 'admin@admin.com'
username = 'admin'
password = factory.PostGenerationMethodCall('set_password', 'adm1n')

is_superuser = True
is_staff = True
is_active = True

关于python - 如何使用 Factory_Boy 创建管理员用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15616277/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com