Ich bin ein relativer Django-Anfänger und habe gerade angefangen, ein paar Tests für meine Projekte durchzuführen. Ich möchte einen Funktionstest mit Selen erstellen, der sich auf der Django Admin-Site anmeldet.Wie können Sie einen Admin-Benutzer mit Factory_Boy erstellen?
Ich folgte zuerst diesem Tutorial und verwendete Fixtures und dumpdata, um die Admin-Account-Informationen für die Test-App verfügbar zu machen (die eine neue Datenbank erstellt). Das funktioniert gut.
Ich wollte dann sehen, ob ich das gleiche mit factory-boy tun kann, um die Fixtures zu ersetzen. Factory Boy arbeitet, indem er das notwendige Objekt innerhalb der Datei tests.py instanziiert, die mir sauberer erscheint. Irgendwie kann ich nicht bekommen dies funktioniert und die Factory_boy Dokumentation ist nicht allzu hilfreich ...
Hier ist meine tests.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...')
Dies als einzuloggen nicht irgendwie funktioniert es nicht schaffen gültiges Administratorkonto Wie kann ich das mit Factory-Boy machen? Ist es möglich oder muss ich dafür Geräte benutzen?
(In diesem Post einige Leute vorgeschlagen, Fixtures sind notwendig, aber Fabrik Junge kam nicht: How to create admin user in django tests.py. Ich habe auch versucht, die Lösung unten in der gleichen Antwort vorgeschlagen: https://stackoverflow.com/a/3495219/1539688. Es hat nicht funktioniert für mich .. .)
Wie können Sie 'User Groups' einstellen? – Shubham
Für diejenigen, die diesen Beitrag jetzt finden, ignoriert 2.5.0+ jetzt die Attribute "FACTORY_ *" zugunsten der Definition von Attributen in einer inneren Meta-Klasse: http://factoryboy.readthedocs.io/en/latest/changelog.html#upgrading – RevolutionTech