Jestem względnym początkującym Django i właśnie zacząłem testować moje projekty. Chciałbym zbudować test funkcjonalny z selenem, który loguje się na stronie Django Admin.W jaki sposób można utworzyć administratora z Factory_Boy?
Po raz pierwszy skorzystałem z tego samouczka http://www.tdd-django-tutorial.com/tutorial/1/ i użyłem urządzeń i dumpdata, aby udostępnić informacje o koncie administratora aplikacji testowej (która tworzy nową bazę danych). To działa dobrze.
Potem chciałem sprawdzić, czy mogę zrobić to samo, używając factory-boy, aby wymienić urządzenia. Fabryka chłopiec działa poprzez utworzenie obiektu niezbędnego w pliku tests.py, który wydaje się być dla mnie czystszy. Jakoś nie mogę uzyskać to do pracy i dokumentacja Factory_boy nie jest zbyt pomocny ...
Oto moja 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...')
To nie zaloguje się jako jakoś nie tworzy prawidłowe konto administratora. Jak mogę to zrobić, używając chłopca z fabryki? Czy jest to możliwe, czy też potrzebuję do tego celu urządzeń?
(W tym poście niektórzy ludzie sugerują, że urządzenia są niezbędne, ale chłopiec fabryczny nie podszedł: How to create admin user in django tests.py. Próbowałem również rozwiązanie sugerowane na dole w tej samej odpowiedzi: https://stackoverflow.com/a/3495219/1539688. To nie działa dla mnie .. .)
Jak ustawić "Grupy użytkowników". – Shubham
Dla tych, którzy znaleźli ten wpis teraz, 2.5.0+ teraz ignoruje atrybuty 'FACTORY_ *' na rzecz definiowania atrybutów w wewnętrznej klasie Meta: http://factoryboy.readthedocs.io/en/latest/changelog.html#upgrading – RevolutionTech