Вопросы с тегами [django-testing]

1

голосов
1

ответ
174

Просмотры

В тесте Джанго есть пустое QuerySet, присвоенные переменные, но не пусто при печати в консоли во время отладки

Я отладки Django (1.11.8) тест и наблюдая странное поведение, при остановке в отладчик и переключился на IPython консоли ввода: Model.objects.all () возвращает непустое QuerySet. Однако, когда один и то же выражение присваиваются переменным, например: obj_qs = Model.objects.all (), а затем obj_qs пусто QuerySet. Я хотел бы ожидать того же результата с обоих утверждений. Я пропускаю что-то важное в настройках тестов? Я использую как setUpTestData () и нАлАдкУ () методы для инициализации объектов для теста.
izkeros
1

голосов
1

ответ
78

Просмотры

Django PUT TestCase fails if client initialised in setUpTestData() but passes if client initialized in setUp()

first_name ': "Джонни"} changed_user_data = {** self.user_data, **} изменения ответа = self.client.put (обратный (' данные, kwargs = { '' электронная почта: user.email_id}), changed_user_data, формат = «JSON») self.assertEqual (response.status_code, status.HTTP_200_OK) Этот тест завершается с response.status_code = 415 (неподдерживаемый тип носителя), тогда как, если я просто переместить инициализации клиента с setUpTestData () к Установке () все проходит , Защита нАлАдкА (Я): self.client = APIClient () # Проверяет дело передается в настоящее время. ... Есть другие тесты для GET, POST, DELETE, все из которых проходят независимо от того, является ли экземпляр клиента совместно (setUpTestData) или нет. PS: Все интерфейсы, включая PUT работы с точки зрения DRF Web API. } Changed_user_data = {** self.user_data, **} изменения ответа = self.client.put (обратный ( 'данные', kwargs = { 'электронная почта': user.email_id}), changed_user_data, формат = 'JSON') самостоятельно .assertEqual (response.status_code, status.HTTP_200_OK) Этот тест завершается с response.status_code = 415 (неподдерживаемый тип носителя), тогда как, если я просто переместить инициализации клиента из setUpTestData () к Установке () все проходит. Защита нАлАдкА (Я): self.client = APIClient () # Проверяет дело передается в настоящее время. ... Есть другие тесты для GET, POST, DELETE, все из которых проходят независимо от того, является ли экземпляр клиента совместно (setUpTestData) или нет. PS: Все интерфейсы, включая PUT работы с точки зрения DRF Web API. } Changed_user_data = {** self.user_data, **} изменения ответа = self.client.put (обратный ( 'данные', kwargs = { 'электронная почта': user.email_id}), changed_user_data, формат = 'JSON') самостоятельно .assertEqual (response.status_code, status.HTTP_200_OK) Этот тест завершается с response.status_code = 415 (неподдерживаемый тип носителя), тогда как, если я просто переместить инициализации клиента из setUpTestData () к Установке () все проходит. Защита нАлАдкА (Я): self.client = APIClient () # Проверяет дело передается в настоящее время. ... Есть другие тесты для GET, POST, DELETE, все из которых проходят независимо от того, является ли экземпляр клиента совместно (setUpTestData) или нет. PS: Все интерфейсы, включая PUT работы с точки зрения DRF Web API. ставить (реверс ( 'данные', kwargs = { 'электронной почты': user.email_id}), changed_user_data, формат = 'JSON') self.assertEqual (response.status_code, status.HTTP_200_OK) Этот тест терпит неудачу с response.status_code = 415 (неподдерживаемый тип носителя), тогда как, если я просто переместить инициализации клиента из setUpTestData () к Установке () все проходит. Защита нАлАдкА (Я): self.client = APIClient () # Проверяет дело передается в настоящее время. ... Есть другие тесты для GET, POST, DELETE, все из которых проходят независимо от того, является ли экземпляр клиента совместно (setUpTestData) или нет. PS: Все интерфейсы, включая PUT работы с точки зрения DRF Web API. ставить (реверс ( 'данные', kwargs = { 'электронной почты': user.email_id}), changed_user_data, формат = 'JSON') self.assertEqual (response.status_code, status.HTTP_200_OK) Этот тест терпит неудачу с response.status_code = 415 (неподдерживаемый тип носителя), тогда как, если я просто переместить инициализации клиента из setUpTestData () к Установке () все проходит. Защита нАлАдкА (Я): self.client = APIClient () # Проверяет дело передается в настоящее время. ... Есть другие тесты для GET, POST, DELETE, все из которых проходят независимо от того, является ли экземпляр клиента совместно (setUpTestData) или нет. PS: Все интерфейсы, включая PUT работы с точки зрения DRF Web API. status_code, status.HTTP_200_OK) Этот тест завершается с response.status_code = 415 (неподдерживаемый тип носителя), тогда как, если я просто переместить инициализации клиента из setUpTestData () к Установке () все проходит. Защита нАлАдкА (Я): self.client = APIClient () # Проверяет дело передается в настоящее время. ... Есть другие тесты для GET, POST, DELETE, все из которых проходят независимо от того, является ли экземпляр клиента совместно (setUpTestData) или нет. PS: Все интерфейсы, включая PUT работы с точки зрения DRF Web API. status_code, status.HTTP_200_OK) Этот тест завершается с response.status_code = 415 (неподдерживаемый тип носителя), тогда как, если я просто переместить инициализации клиента из setUpTestData () к Установке () все проходит. Защита нАлАдкА (Я): self.client = APIClient () # Проверяет дело передается в настоящее время. ... Есть другие тесты для GET, POST, DELETE, все из которых проходят независимо от того, является ли экземпляр клиента совместно (setUpTestData) или нет. PS: Все интерфейсы, включая PUT работы с точки зрения DRF Web API. Удалить все из которых проходят независимо от того, является ли общий экземпляр клиента (setUpTestData) или нет. PS: Все интерфейсы, включая PUT работы с точки зрения DRF Web API. Удалить все из которых проходят независимо от того, является ли общий экземпляр клиента (setUpTestData) или нет. PS: Все интерфейсы, включая PUT работы с точки зрения DRF Web API.
Abhinav
1

голосов
1

ответ
17

Просмотры

SMS / Text бэкенд в Django

Я хочу, чтобы создать бэкенд для отправки SMS / Текст как EmailBackEnd I может выполнить задачу отправки SMS только штраф, но проблема в том, тестирование. Я могу проверить, сколько электронной почты посылаются в ходе испытаний с использованием django.core.mail.outbox я хочу сделать что-то подобное для SMS сказать sms.smsoutbox так, как бы я идти о написании что-то вроде этого для Django. Я понимаю, что электронная почта сходящие находится в localmemory на протяжении одного теста, так что я могу спросить, что, как вы положить что-то в localmemory на время испытания. Спасибо уже.
naveen.panwar
1

голосов
1

ответ
297

Просмотры

Why isn't Django creating blank a database during test?

When I run a unit test, Django 1.6 doesn't seem to be creating a blank database to test from and I don't understand why. The Django docs say that Django doesn't use your production database but instead creates a separate, blank database for testing. However, when I debug my test 'test_get_user_ids' and run the command 'UserProxy.objects.all()', I see all the users in my production database. Now I understand that this particular test will fail due to the fact that I'm not saving each UserProxy instance to the database and am therefore not generating ids to test for. But the fact remains that when I query UserProxy, I can still see all the users in my production database which I would expect to be empty. Why is this happening? BTW, I'm running the test using nosetest: "nosetests -s apps.profile.tests.model_tests.py:UserProxyUT" Thanks. # settings.py DATABASES = { 'default': { # Enable PostGIS extensions 'ENGINE' : 'django.contrib.gis.db.backends.postgis', 'NAME' : 'myapp', 'USER' : 'myappuser', 'PASSWORD': 'myapppw', 'HOST' : 'localhost', 'PORT' : '', } } # apps/profile/models.py from django.contrib.auth.models import User class UserProxy(User): """Proxy for the auth.models User class.""" class Meta: proxy = True @staticmethod def get_user_ids(usernames): """Return the user ID of each username in a list.""" user_ids = [] for name in usernames: try: u = User.objects.get(username__exact=name) user_ids.append(u.id) except ObjectDoesNotExist: logger.error("We were unable to find '%s' in a list of usernames." % name) return user_ids # apps/profile/tests/model_tests.py from django.contrib.auth.models import User from django.test import TestCase from apps.profile.models import UserProxy class UserProxyUT(TestCase): def test_get_user_ids(self): debug() # UserProxy.objects.all() shows usernames from my production database! u1 = UserProxy(username='user1') u2 = UserProxy(username='user2') u3 = UserProxy(username='user3') usernames = [u1, u2, u3] expected = [u1.id, u2.id, u3.id] actual = UserProxy.get_user_ids(usernames) self.assertEqual(expected, actual)
Jim
1

голосов
1

ответ
821

Просмотры

Джанго: Как связать пользователя с запросом завода

Я пишу некоторые тесты для формы на сайте Django. Я хочу, чтобы проверить, что вошедший пользователь может использовать форму, предполагая правильный вход. С этой целью я использую запрос завод Джанго. Я не могу показаться, чтобы получить мой тестовый пользователь вошел в хотя. Это, или я даже не делая запрос правильно. Я не уверен. Соответствующий код ниже: Защиту create_user (): имя пользователя = 'Пользователь' + id_generator () возвращают User.objects.create (имя пользователя = имя пользователя, пароль = 'пароль') Защиту test_can_register_deck (Я): т = create_empty_tourney () и = create_user ( ) d = create_deck (и) Rf = RequestFactory () запрос = rf.post (обратный ( 'турнирную: турнир', арг = (t.slug,)), { 'палуба': d}) request.user = и ответ = self.client.get (обратный ( 'турнир: турнир', Args = (t.slug, )), Запрос) self.assertEqual (response.status_code, 200) Запрос должен думать, что пользователь вошел в систему, или остальные испытания не будут работать. Это не приводит к возникновению ошибок, но я даже не уверен, что мой ответ использует запрос правильно. Могу ли я правильно говорить тест, чтобы «сделать пост запрос на страницу турнирной как этот пользователь, и попытаться представить колоду»?
fildred13
1

голосов
1

ответ
241

Просмотры

Django-nonrel + ошибка MongoDB во время выполнения тестов

У меня есть установки внутри виртуальной среды: Django-nonrel-1,6 MongoDB двигатель djangotoolbox Все работает отлично, единственная проблема заключается в процессе выполнения тестов. Каждый раз, когда Джанго пытается очистить базу данных после выполнения функции тестирования он выдает ошибку: Traceback (самый последний вызов последнего): Файл «/home/lehins/.virtualenvs/studentpal/local/lib/python2.7/site-packages/django /test/testcases.py», строка 187, в __call__ self._post_teardown () Файл "/home/lehins/.virtualenvs/studentpal/local/lib/python2.7/site-packages/django/test/testcases.py" , строка 796, в _post_teardown self._fixture_teardown () Файл "/home/lehins/.virtualenvs/studentpal/local/lib/python2.7/site-packages/django/test/testcases.py", строка 889, в _fixture_teardown вернуться супер (TestCase, самость) ._ fixture_teardown () Файл «/ главная / lehins /. django-admin.py sqlflush. Вот SQL эта команда не смогла работать. Полная ошибка: внешний «атомный» блок не может использовать точку сохранения = False, когда автокоммит выключен. Таким образом, для каждого теста, у меня есть пропуск или потерпеть неудачу, как это предположить, но я также получаю эту досадную ошибку. Я побежал django-admin.py sqlflush --settings = dev_settings --pythonpath =., Которая продували моя база данных развития просто отлично, без ошибок. Через пару пробных функций я проверил несколько моделей, вытащили из базы данных, и это, кажется, промывка и воссоздания объектов просто отлично, так вот почему она не влияет на реальные тестовые случаи. Я пошел, хотя весь TRACEBACK, и я отчасти понимаю, почему это происходит, но я не могу понять, как бороться с. Любая помощь приветствуется. Редактировать Просто попытался запустить тесты с Django-nonrel-1.5, не было никаких проблем.
lehins
1

голосов
2

ответ
172

Просмотры

Unusual error in Django tests wrongly thinking instance doesn't exist

I have very customised Django app that checking to see if a user can change a ForeignKey to certain values. In this instance, a User belongs to a Workgroup and an Item can also belong to a Workgroup, and consequently, when a User makes an Item, they can only put it in Workgroups they belong to. Complicating matters Item is a parent class, so there are lots of types of "Item". At present I have a custom admin form setup to check this: class AdminConceptForm(autocomplete_light.ModelForm): def __init__(self, *args, **kwargs): #... other code self.fields['workgroup'].queryset = self.request.user.profile.editable_workgroups.all() The important bits of this test are: def setUp(self): from django.test import Client self.client = Client() self.wg1 = models.Workgroup.objects.create(name="Test WG 1") # Editor is member def test_editor_change_item(self): self.login_editor() response = self.client.get(reverse("admin:%s_%s_change"%(self.itemType._meta.app_label,self.itemType._meta.model_name),args=[self.item1.pk])) self.assertResponseStatusCodeEqual(response,200) updated_item = dict((k,v) for (k,v) in model_to_dict(self.item1).items() if v is not None) updated_name = updated_item['name'] + " updated!" updated_item['name'] = updated_name updated_item.update({ 'statuses-TOTAL_FORMS': 0, 'statuses-INITIAL_FORMS': 0 #no statuses }) updated_item.update(self.form_defaults) self.assertTrue(self.wg1 in self.editor.profile.myWorkgroups) self.assertEqual([self.wg1],list(response.context['adminform'].form.fields['workgroup'].queryset)) self.assertTrue(perms.user_can_edit(self.editor,self.item1)) self.assertTrue(self.item1.workgroup in self.editor.profile.editable_workgroups.all()) response = self.client.post( reverse("admin:%s_%s_change"%(self.itemType._meta.app_label,self.itemType._meta.model_name),args=[self.item1.pk]), updated_item ) # HERE IS WHERE THE FAILURE IS!!! self.assertResponseStatusCodeEqual(response,302) self.item1 = self.itemType.objects.get(pk=self.item1.pk) self.assertEqual(self.item1.name,updated_name) But sometimes (and intermittently), when I run the test suite, I post to this form to test saving content, and I get this error: ====================================================================== FAIL: test_editor_change_item (aristotle_mdr.tests.test_extension_api.QuestionAdmin) ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/travis/build/aristotle-mdr/aristotle-metadata-registry/aristotle_mdr/tests/test_admin_pages.py", line 285, in test_editor_change_item self.assertResponseStatusCodeEqual(response,302) File "/home/travis/build/aristotle-mdr/aristotle-metadata-registry/aristotle_mdr/tests/utils.py", line 501, in assertResponseStatusCodeEqual self.assertEqual(response.status_code, code) AssertionError: 200 != 302 Because of the nature of this, if posted successfully, the page should redirect, and I have some code that just spits of the response HTML if this isn't the case, and in those cases I get this: Workgroup --------- Test WG 1 workgroup instance with pk 17 does not exist. However, when this error fires, not every item type will throw the error, only one or two. But if you look at the select field, the workgroup with id (or pk) 17 is there! Plus, when I rerun the test suite it will be fine (sometimes afer a few "warm-up" goes). I've also never encountered this in a non-test site. I think this might be due to the way Django tests are kept in transactions? I'm starting to get annoyed with this, as it used to be quite intermittent but now its getting more frequent - but still random. So this is still failing and I can say what doesn't fix it: Using a file-based SQLite instance instead of in-memory Using PostgreSQL for tests Switching from TestCase to TransactionTestCase What I know: Tests run fine on the development serve, but the same tests fail on Travis-CI Its not just the calls to the test web Client, but also some other querysets work It might be Transaction based, but I'm not sure. And for the ultra curious here is the issue I'm trying to quash but can't. Edit: 2015-06-11 I have built a failing, self contained example!! SQLite consistently works, Postgres consistently fails. It seems that for some reason this code is consistently bad: def test_bar(self): # This test will always work print("Do Bar") self.do_foo() print("Bar done") def test_foo(self): # This test will always work print("Do Foo") self.login_editor() response = self.client.get(reverse("admin:%s_%s_changelist"%(self.itemType._meta.app_label,self.itemType._meta.model_name))) self.assertResponseStatusCodeEqual(response,200) self.do_foo() print("Foo done") def test_zip(self): # This test will always FAIL print("Do Zip") self.do_foo() print("Zip done") In fact, calling an admin changelist view will always cause any subsequent admin pages to fail on Postgres when trying to save as the Workgroup no longer appears in querysets. Now, why is that? The full code: class MinimalExample(TestCase): itemType=models.ObjectClass form_defaults = {} create_defaults = {} def setUp(self): self.wg1 = models.Workgroup.objects.create(name="Test WG") self.editor = User.objects.create_user('eddie','','editor') self.editor.is_staff=True self.editor.save() self.wg1.submitters.add(self.editor) self.assertEqual(self.editor.profile.editable_workgroups.count(),1) self.item1 = self.itemType.objects.create(name="admin_page_test_oc",description=" ",workgroup=self.wg1,**self.create_defaults) def logout(self): self.client.post(reverse('django.contrib.auth.views.logout'), {}) def login_editor(self): self.logout() response = self.client.post(reverse('friendly_login'), {'username': 'eddie', 'password': 'editor'}) self.assertEqual(response.status_code,302) return response def assertResponseStatusCodeEqual(self,response,code): self.assertEqual(response.status_code, code) def test_bar(self): print("Do Bar") self.do_foo() print("Bar done") def test_foo(self): print("Do Foo") self.login_editor() response = self.client.get(reverse("admin:%s_%s_changelist"%(self.itemType._meta.app_label,self.itemType._meta.model_name))) self.assertResponseStatusCodeEqual(response,200) self.do_foo() print("Foo done") def test_zip(self): print("Do Zip") self.do_foo() print("Zip done") def do_foo(self): url_bits = (self.itemType._meta.app_label,self.itemType._meta.model_name) response = self.client.post(reverse('friendly_login'), {'username': 'eddie', 'password': 'editor'}) response = self.client.get(reverse("admin:%s_%s_add"%url_bits)) data = {'name':"admin_page_test_oc",'description':"test","workgroup":self.wg1.id, 'statuses-TOTAL_FORMS': 0, 'statuses-INITIAL_FORMS': 0 #no substatuses } response = self.client.post(reverse("admin:%s_%s_add"%url_bits),data) self.item1 = self.itemType.objects.first() response = self.client.get(reverse("admin:%s_%s_change"%url_bits,args=[self.item1.id])) data['name'] = "updated" # Re post the same data response = self.client.post( reverse("admin:%s_%s_change"%url_bits,args=[self.item1.id]), data ) print response self.item1 = self.itemType.objects.first() # decache self.assertTrue(self.item1.name == "updated")
1

голосов
1

ответ
428

Просмотры

Джанго TestCase без миграции базы данных и SyncDB

Я пытаюсь создать тестовые случаи для моих миграционных функций (называемых с migrations.RunPython). Моя идея состояла в том, чтобы создать тест, который не запускается перед началом миграции, ни SyncDB создать базу данных в одном шаге. После этого, я планирую запустить первый шаг, запустить сопутствующие тесты, запустить второй шаг, то связанные с ним тесты и т.д. Возможно ли это каким-то образом, или если нет, то можно проверить функции миграции в любом случае?
GergelyPolonkai
1

голосов
1

ответ
23

Просмотры

Тестирование для исключения терпит неудачу

Когда я сохранить модель пользователя, я хотел бы проверить, если он имеет имя. Поэтому я написал эту pre_save: @receiver (pre_save, отправитель = User) Защита validate_user (отправитель, экземпляр, ** kwargs): если Len (instance.username)
Saphire
1

голосов
1

ответ
491

Просмотры

Вход Тестовые неудачу в Django 1.8

Сегодня я учусь писать тесты в Django, и написал тестовый пример для проверки подлинности действительных пользователей. от django.test импорта TestCase из django.http импорта HttpRequest из aptly_dash.views импорта newRepo, главная страница с селеном импорта WebDriver из django.test импорта класса Client MyTestCase (TestCase): Защиту нАлАдкА (Я): self.client = Client () самостоятельно .browser = webdriver.Firefox () # Защита Teardown (Я): self.browser.quit () Защита test_redirect (Я): ответ = self.client.get ( '/ администратор /') self.assertRedirects (ответ, «/ админы / Логин / следующий = / админ / ') Защита test_login (Я): # Issue запрос GET. ответ = self.client.login (имя пользователя = «Ракеш», пароль = «Ranjan») ответ печати я уже создал имя пользователя =» Ракеш»и пароль =„Ranjan“но ответ выходит ложными. Я довольно новыми для написания тестов, и был бы признателен, если кто-нибудь может сказать мне, что случилось с моей функции test_login. Я также хочу написать тест, чтобы проверить, является ли Джанго URL-адрес является 403-запрещенным к неавторизованным пользователям, а также 403-запрещено, прошедшие проверке подлинности, но не пользователям сотрудников. Можно ли указать мне хорошую документацию.
python
1

голосов
1

ответ
44

Просмотры

Django restframework разрешения тестов

Какой правильный способ для проверки прав доступа на основе объекта? Пример: от rest_framework разрешений на импорт класс IsOfficeAdmin (permissions.BasePermission): Защита has_object_permission (самостоятельно, запрос, вид, объект): офис = OBJ вернуться office.admin == request.user Какие из них «утверждает», что я не должен пропустить ? Должен ли я создать представление?
Klahnen
1

голосов
1

ответ
667

Просмотры

Тестирование URL-адрес перенаправления в Django

Если я иду к HTTP: // локальный: 8000 / Войти /, форма Логин будет отображаться, и вы должны ввести имя пользователя и пароль. Если учетные данные верно, то вы будете перенаправлены на HTTP: // локальный: 8000 / приборная панель /. Проблема я столкнулся во время тестирования, даже если мое имя пользователя и пароль правильны это не перенаправляются на HTTP: // локальный: 8000 / приборная панель / а он идет к HTTP: // TestServer / администратор / Логин / следующая = / приборная доска/. Я использую следующий код для отдыха функциональности переназначения в Джанго: класс UrlTests (TestCase): Защита test_client_cart (Я): ответ = self.client.get ( '/ Войти /') self.assertEqual (200, response.status_code) Защиты test_login_client (Я): User.objects.create_user ( 'Ракеш', '[email protected]', 'Ranjan') self.client.get ( '/ Войти /') self.client. Логин (имя пользователя = 'Ракеш', пароль = 'Ranjan') печать self.client.get ( '/ панель /') Может кто-нибудь сказать мне, почему я перенаправлен на HTTP: // TestServer / администратор / Логин / следующий = / Приборная панель / вместо HTTP: // локальный: 8000 / приборная панель /. В моем settings.py файле: LOGIN_URL = «/» LOGOUT_URL = «/ выход из системы /» LOGIN_REDIRECT_URL = «/ панели /» LOGOUT_REDIRECT_URL = «/» Мое приложение работает нормально, но я не в состоянии проверить переназначения вещь. Может кто-нибудь дать мне некоторые указатели, где я неправильно? Если я распечатать печати self.client.login (имя пользователя = «Ракеш», пароль = «Ranjan») она выходит, чтобы быть правдой, которая означает, что я могу войти в систему, но почему бы не перенаправление? Обновление: Я также попытался с помощью селена четкости login_user (Self): # Пользователь открывает веб-браузер и переходит на сайт самостоятельно. browser.get (self.live_server_url + '/ Войти /') типы # пользователя в его имя пользователя и пароль и хиты вернуться username_field = self.browser.find_element_by_name ( 'имя пользователя') username_field.send_keys ( 'Ракеш') password_field = self.browser .find_element_by_name ( 'пароль') password_field.send_keys ( 'Ranjan') #user отправляет форму password_field.send_keys (Keys.RETURN) тело = self.browser.find_element_by_tag_name ( 'тело') печати body.text Вот и я набираюсь body.text от администратора страницы, но не панели страницы. Вид на панель:: Обновление класса PortalDashboardView (RequireStaffMixinView, TemplateView): template_name = "Портал / dashboard.html" ) Типы # пользователя в его имя пользователя и пароль и хиты вернуться username_field = self.browser.find_element_by_name ( 'имя пользователя') username_field.send_keys ( 'Ракеш') password_field = self.browser.find_element_by_name ( 'пароль') password_field.send_keys ( 'Ranjan «) #user отправляет форму password_field.send_keys (Keys.RETURN) тело = self.browser.find_element_by_tag_name (» ') печатающую тело body.text Вот и я получаю body.text на странице администратора, но не панели страницы. Вид на панель:: Обновление класса PortalDashboardView (RequireStaffMixinView, TemplateView): template_name = "Портал / dashboard.html" ) Типы # пользователя в его имя пользователя и пароль и хиты вернуться username_field = self.browser.find_element_by_name ( 'имя пользователя') username_field.send_keys ( 'Ракеш') password_field = self.browser.find_element_by_name ( 'пароль') password_field.send_keys ( 'Ranjan «) #user отправляет форму password_field.send_keys (Keys.RETURN) тело = self.browser.find_element_by_tag_name (» ') печатающую тело body.text Вот и я получаю body.text на странице администратора, но не панели страницы. Вид на панель:: Обновление класса PortalDashboardView (RequireStaffMixinView, TemplateView): template_name = "Портал / dashboard.html" send_keys ( '') Ракеш password_field = self.browser.find_element_by_name ( 'пароль') password_field.send_keys ( 'Ranjan') #user отправляет форму password_field.send_keys (Keys.RETURN) тело = self.browser.find_element_by_tag_name ( 'тело' ) печать body.text Вот и я получаю body.text на странице администратора, но не приборной панели страницы. Вид на панель:: Обновление класса PortalDashboardView (RequireStaffMixinView, TemplateView): template_name = "Портал / dashboard.html" send_keys ( '') Ракеш password_field = self.browser.find_element_by_name ( 'пароль') password_field.send_keys ( 'Ranjan') #user отправляет форму password_field.send_keys (Keys.RETURN) тело = self.browser.find_element_by_tag_name ( 'тело' ) печать body.text Вот и я получаю body.text на странице администратора, но не приборной панели страницы. Вид на панель:: Обновление класса PortalDashboardView (RequireStaffMixinView, TemplateView): template_name = "Портал / dashboard.html" ) Печать body.text Вот и я получаю body.text на странице администратора, но не приборной панели страницы. Вид на панель:: Обновление класса PortalDashboardView (RequireStaffMixinView, TemplateView): template_name = "Портал / dashboard.html" ) Печать body.text Вот и я получаю body.text на странице администратора, но не приборной панели страницы. Вид на панель:: Обновление класса PortalDashboardView (RequireStaffMixinView, TemplateView): template_name = "Портал / dashboard.html"
python
1

голосов
1

ответ
94

Просмотры

доступа к аннотированному QuerySet при написании тестовых примеров Django

Я пытаюсь написать тест, который делает использование атрибута, который был добавлен с помощью аннотаций, но мой тест не может использовать любые идеи, как я могу это исправить? благодаря собственности в моей модели: @property Защита amount_net (Я): net_sum = self.amount_net_sum возврат Десятичного (раунд (net_sum, 2)), если net_sum еще Decimal ( "0,00") self.amount_net_sum приходит от пользовательского менеджера: класс InvoiceManager ( models.Manager): Защита get_queryset (Я):. QS = супер () get_queryset () QS = qs.annotate (amount_net_sum = Sum ( 'line_items__amount_net')) возвращение в достаточном количестве теста: self.invoice_test1 = Invoice.objects.create (состояние = InvoiceStatus.NEW, язык = 'ан', тип = InvoiceType.INVOICE, созданный = дата (2015, 1, 30), получатель = профиль,) и self.assertEqual (самостоятельно.
ePezhman
1

голосов
2

ответ
507

Просмотры

Тестовый пример для GET API для APIView не работает в djangorestframework

Я пишу тест, в Django на GET API. Я просто хочу, чтобы сделать самый первый тестовый проход. Вот мой код. Класс InventoryItemDetailTestCase (APITestCase): "" "Это тест API случае для резервного / экспресса подробно апи """ DEF нАлАдкУ (сам): self.resource_uri = '/ апи / v2 / инвентаря / inventory_item_detail / 1233 /' Защиты test_inventory_item_detail_route (Я): "" "Тест для установки маршрутизации для item_detail """ маршрут = решительность ( '/ апи / v2 / инвентарь / inventory_item_detail / 1233 /') self.assertEqual (route.func .__ name__, 'InventoryItemDetails') Защита test_inventory_item_detail_data (Я): «»»Контрольный пример для проверки ответа JSON из резервного / экспресс API„“ / API / v2 / инвентарь / inventory_item_detail / 1233 / ') Я получаю эту ошибку *** KeyError: 'тип содержимого' Я пытался поставлять дополнительный аргумент имя CONTENT_TYPE как self.client.get (' / API / v2 / инвентарь / inventory_item_detail / 1233 /», content_type = 'приложения / JSON'), но до сих пор я получаю ту же ошибку. Я могу запустить API, отдельно и мой API является извлечение надлежащего responses.If кто-то прошел через это раньше, пожалуйста, дайте мне знать.
Chitrank Dixit
1

голосов
1

ответ
153

Просмотры

Тестирование Django Generic View

Я только начинаю с Django, и я действительно хочу, чтобы попасть в Habbit тестирования все, что я должен. Большинство моих классов прямо сейчас общие взгляды на основе класса, такие как просмотр списка, например. Вот один такой: класс CellView (ListView): «»»Класс, который определяет вид списка для всех ячеек наследуется от Django GenericView ListView класса Атрибуты: Модель: перекрытая атрибут, который указывает на то, что клетка является моделью, которая будет отображаться TEMPLATE_NAME: перекрытая атрибут, который указывает на то которые HTML шаблон использовать QuerySet: перекрытая атрибут, который указывает на питона QuerySet всех объектов клеток быть displated context_object_name: перекрытая атрибут, который указывает на строку, чтобы назвать объект контекста в шаблоне «»» модель = Cell template_name = «CellView.html» query_set = Cell.objects.all () context_object_name = «Cells» У меня нет никаких собственных методов, и я все здесь определяют атрибуты. Должен ли я испытывать этот код здесь? Или же все это действительно считается чем-то Django ручками, и я должен верить, что он будет работать? Если я должен испытывать его, что конкретно я должен испытывать?
Clayton Wilson
1

голосов
1

ответ
302

Просмотры

Джанго тест печать или журнал ошибок

как я могу знать, какой URL провалил тест? Я перебор всех URL-адресов, требующий вход, то есть много ссылок, как я могу напечатать тот, который не прошел тест?
Alejandro Veintimilla
1

голосов
2

ответ
1.1k

Просмотры

Джанго Тестирование - загрузка данных в базу данных перед загрузкой приложения

Я в настоящее время написания некоторых тестов для приложения Django (+ рамочного REST), а также некоторые проблемы с загрузкой тестовых данных в базу данных. Позвольте мне объяснить, с каким-то (очень упрощенно) кодом: У меня есть мнение Джанго, который что-то вроде: view.py из myapp.models импорта из пункта myapp.utils импорта MyClass # необходимо инициализировать с набором элементов item_set = {ст. имя для элемента Item.objects.all ()} my_class_object = MyClass (item_set) класса MyView (APIView): Защита поста (selfself, запрос): результат = my_class_object.process (request.data) возвращает ответ (результат) Поэтому в основном я необходимо инициализировать класс с некоторыми данными из базы данных, а затем я использую этот класс на мой взгляд, для обработки данных, полученных в конечной точке. Теперь тест: my_test.py из rest_framework.test импорта APILiveServerTestCase из MyApp. objects.all ()} my_class_object = MyClass (item_set) база данных по-прежнему пуст. Я интересно, если есть способ, чтобы либо получить данные в базу данных, прежде чем view.py получить казнен, или, может быть, какую-то образом заставить перезагрузить приложение после завершения установки () или экземпляр моего класса где-то еще, так что вызывается после загрузки данных ? Спасибо !
Duf59
1

голосов
1

ответ
336

Просмотры

Джанго: утверждать «многие-ко-многим» отношение существует в тесте

Я пишу тесты для моего проекта, но я столкнулся с проблемой при попытке проверить существование отношений марки «ManyToMany». Испытание касается следующих двух моделей, которые связаны друг с другом с ManyToMany моделей: проект класса (models.Model): (...) linked_attributes = models.ManyToManyField (атрибуты, пустой = True) Атрибуты класса (models.Model): (...) класса linked_projects = models.ManyToManyField (проект, пустой = True) в моем тесте я хотел убедиться, что форма создания нового отношения многие ко многим. Я создал Assert на последней строке, на основе некоторых примеров кода, но не кажется, что это будет работать. Тест: класс ProjectTest (TestCase): (...) form_data = { 'linked_attributes': self.attribute} форма = ProjectForm (данные = form_data, проект = self.project, экземпляр = self.project) самостоятельно.
Jasper
1

голосов
1

ответ
701

Просмотры

Джанго тестирование: RequestFactory () следует перенаправление

В Django, у меня есть представление, которое будет перенаправлять на страницу регистров для определенных пользователей, и я хотел бы написать тест для этого. Стандарт request.client.get используется для тестирования не позволяет мне указать пользователю (это только по умолчанию anonymous_user?), Так что я не могу проверить поведение. С RequestFactory () я был в состоянии указать request.user. Тем не менее, не следует перенаправлять и тест не пройден. от .views импорта my_view из django.test импорта RequestFactory () Защита test_mytest (Я): пользователь = create_guest_user () self.factory = RequestFactory () запрос = self.factory.get (обратный ( 'my_view'), следует = True) request.user = ответ пользователя = my_view (запрос) self.assertContains (ответ «страница, где переадресованные должен содержать это») это не будет работать на последней строке с этим сообщением об ошибке: AssertionError: 302! = 200: Не удалось получить содержимое: Код ответа было 302 (ожидался 200) Любые идеи, как это сделать? EDIT: Насколько я могу сказать, что это не является дубликатом, как это относится к RequestFactory (), которая отличается от self.client.get (где следуют = True будет решить эту проблему).
M3RS
1

голосов
1

ответ
236

Просмотры

Проверка существования объекта разрешения в тесте Джанго единицы

Предположим, что я хочу написать тест, чтобы убедиться, что разрешение не существует. Я хочу, чтобы следующий тест, чтобы пройти (вместо этого он выдает ошибку): от django.test импорта TestCase из django.contrib.auth.models импорта класса Разрешение TestPermission (TestCase): test_existence_of_permission четкости (Self): self.assertIsNone (Permission.objects .get (Кодовый = «a_non_existant_permission»)) Это дает мне следующее сообщение об ошибке: django.contrib.auth.models.DoesNotExist: согласование Разрешения запрос не существует. Как я могу проверить несуществование этого разрешения?
HBat
1

голосов
1

ответ
328

Просмотры

form.is_valid() failing in Django unit test

I'm running a unit test for a Django form, and form.is_valid() keeps returning False and I cannot find the error. Here's the code for forms.py: class CustomClearableFileInput(forms.ClearableFileInput): template_name = 'forums/templates/clearable_file_input.html' class NewQuestionForm(forms.ModelForm): category = forms.ModelChoiceField(widget = forms.Select(attrs = {}), queryset = FossCategory.objects.order_by('name'), empty_label = "Select a Foss category", required = True, error_messages = {'required':'Select a category'}) title = forms.CharField(widget = forms.TextInput(), required = True, error_messages = {'required':'Title field required'}, strip=True) body = forms.CharField(widget = forms.Textarea(), required = True, error_messages = {'required':'Question field required'}, strip=True) is_spam = forms.BooleanField(required = False) spam_honeypot_field = HoneypotField() image = forms.ImageField(widget = CustomClearableFileInput(), help_text = "Upload image", required = False) def clean_title(self): title = str(self.cleaned_data['title']) if title.isspace(): raise forms.ValidationError("Title cannot be only spaces") if len(title) < 12: raise forms.ValidationError("Title should be longer than 12 characters") if Question.objects.filter(title = title).exists(): raise forms.ValidationError("This title already exist.") return title def clean_body(self): body = str(self.cleaned_data['body']) if body.isspace(): raise forms.ValidationError("Body cannot be only spaces") if len(body) < 12: raise forms.ValidationError("Body should be minimum 12 characters long") body = body.replace(' ', ' ') body = body.replace('', '\n') return body class Meta(object): model = Question fields = ['category', 'title', 'body', 'is_spam', 'image'] And here's the code for tests.py: class NewQuestionFormTest(TestCase): @classmethod def setUpTestData(cls): FossCategory.objects.create(name = 'TestCategory', email = '[email protected]') def test_too_short_title(self): category = FossCategory.objects.get(name = "TestCategory") title = 'shorttitlefsodzo' form = NewQuestionForm(data = {'category': category, 'title': title, 'body': 'Test question body'}) self.assertTrue(form.is_valid()) This is what I get with print(form.errors): categorySelect a valid choice. That choice is not one of the available choices.
1

голосов
1

ответ
104

Просмотры

Django's assertQuerysetEqual() method failing despite the two query sets printing out the same in the shell?

I have a Family and a Session with a one-to-many relationship, such that an instance family has a session_set. Further, the Session has a session_number field, which is an integer. I have two instances of Family, family1 and family2, such that if I print out their session_set.order_by('session_number') in the ipdb debugger I get that they look exactly the same: ipdb> family1.session_set.order_by('session_number') ipdb> family2.session_set.order_by('session_number') However, if I input these query sets into assertQuerysetEqual, I get a test failure: ipdb> self.assertQuerysetEqual(family1.session_set.order_by('session_number'), family2.session_set.order_by('session_number')) *** AssertionError: Lists differ: ['', ''] != [, ] First differing element 0: '' Diff is 2186 characters long. Set self.maxDiff to None to see it. Here is a more detailed comparison with maxDiff set to None: ipdb> self.maxDiff = None ipdb> self.assertQuerysetEqual(family1.session_set.order_by('session_number'), family2.session_set.order_by('session_number')) *** AssertionError: Lists differ: ['', ''] != [, ] First differing element 0: '' - ['', ? - - + [, - '', ? - - + , - '', ? - - + , - '', ? - - + , - '', ? - - + , - '', ? - - + , - '', ? - - + , - '', ? - - + , - '', ? - - + , - '', ? - - + , - '', ? - - + , - '', ? - - + , - '', ? - - + , - '', ? - - + , - '', ? - - + , - '', ? - - + , - ''] ? - - + ] It seems like the comparisons are 'out of sync'. However, the session_number is also the same: ipdb> [(session.session_number, str(session.session_type)) for session in family1.session_set.order_by('session_number')] [(0, 'Welcome'), (1, 'First-Time Parents: The Basics of Birth'), (2, 'Initial Postpartum Lactation'), (3, 'Sleep Techniques for New Babies'), (4, 'Breastfeeding Preparation'), (5, 'Newborn Care Basics'), (6, 'Easing the Transition Back to Work'), (7, 'Preparing for Parenting'), (8, 'Decoding Baby Cues'), (9, 'Postpartum Doula Support'), (10, 'First-Time Parents: Birth Prep Q&A'), (11, 'Postpartum Lactation Follow-Up'), (12, 'Sleep Training for 4 Months & Beyond'), (13, 'Mental Wellness in Pregnancy'), (14, 'Infant CPR'), (15, 'Prenatal Pelvic Physical Therapy'), (16, 'Prenatal Massage')] ipdb> [(session.session_number, str(session.session_type)) for session in family2.session_set.order_by('session_number')] [(0, 'Welcome'), (1, 'First-Time Parents: The Basics of Birth'), (2, 'Initial Postpartum Lactation'), (3, 'Sleep Techniques for New Babies'), (4, 'Breastfeeding Preparation'), (5, 'Newborn Care Basics'), (6, 'Easing the Transition Back to Work'), (7, 'Preparing for Parenting'), (8, 'Decoding Baby Cues'), (9, 'Postpartum Doula Support'), (10, 'First-Time Parents: Birth Prep Q&A'), (11, 'Postpartum Lactation Follow-Up'), (12, 'Sleep Training for 4 Months & Beyond'), (13, 'Mental Wellness in Pregnancy'), (14, 'Infant CPR'), (15, 'Prenatal Pelvic Physical Therapy'), (16, 'Prenatal Massage')] Why is assertQuerysetEqual not working as expected here?
Kurt Peek
1

голосов
2

ответ
116

Просмотры

Параметры запроса в PUT вызова APIClient

У меня есть API конечной точки, к которой я хочу сделать PUT вызов, который необходимо параметры одновременно тела и запросов. Я использую тестовый клиент Джанго назвать свою конечную точку в тесте (Документах). Я прочитал в документации, что для GET вызова, параметры запроса вводятся с использованием данных аргументов. Я также читал, что для PUT вызова, данные аргумент представляет тело. Я скучаю по документации, как добавить параметры запроса в PUT вызова. В частности, этот тест не удается: данные = [ 'image_1', 'IMAGE_2'] URL = обратный ( 'изображения') реакции = self.client.put (URL, данные = данные, content_type = 'приложения / JSON', PARAMS = { 'ширина': 100, 'высота': 200}) И этот тест проходит: данные = [ 'image_1', 'IMAGE_2'] URL = обратный (»
physicalattraction
1

голосов
1

ответ
0

Просмотры

Тестовый клиент Джанго игнорирует «включают» термины в шаблоне Django

У меня есть проблема с Django проверяет клиент. Пусть для домашнего пути у меня есть этот шаблон (home.html): {% включают «example.html»%} и в example.html У меня есть ошибка: {% non_registered_tag ​​arg1 arg2%} Я написал тест на доступность к Джанго URL. Класс HomePageAccess (TestCase): Защита test_home_page (Я): клиент = Client () ответ = client.get (reverse_lazy ( 'дом')) self.assertEqual (response.status_code, 200) Этот код не успешно, если будет ошибка в home.html, Но если есть ошибка в example.html, которая включена в home.html Test пройдет, хотя мы ожидаем, что на неудачу, потому что я включил его в home.html и в браузере я сталкиваюсь код ошибки (статус 500 ) в то время как это не происходит в тестовом клиенте. Нормально ли это? Я использую Django 2.0.2. Любая помощь будет оценена
SirSaleh
1

голосов
2

ответ
0

Просмотры

Джанго: изменение корневой среды для испытаний

Я пытаюсь написать несколько тестов для приложения Django, включая загрузку файлов. Для этого, я хочу, чтобы изменить MEDIA_ROOT временно «MyProject / приборы / test_media /». По какой-то причине, кажется, что это мешает Джанго найти светильники. Мой тест выглядит из django.conf настроек импорта класса TestMedia (TestCase): светильники = [ 'светильников / test_data.json'] Защита нАлАдкИ (Я): settings.MEDIA_ROOT = '' .join ([settings.PROJECT_PATH, «/ светильники / test_media / ']) Защита test_photo_size (Я): передать # на самом деле что-то делать с медиа-файлами по какой-то причине, Django не может загрузить светильники, поэтому все тесты не с проблемой установки арматуры „светильники / test_data.json“: Traceback (самый последний вызов последнего) ... Что я делаю не так?
Andrea
1

голосов
2

ответ
72

Просмотры

Use request's user informations in tests

I use an information in user.userprofile to manage permissions. How I use it : # List of status STATUS_CHOICES = ( ('teacher', 'Teacher'), ('student', 'Student'), ) # More field for an user. class UserProfile(models.Model): user = models.OneToOneField(User, unique=True) status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='student') Now, in a view, I have for exemple : # Only the owner view this template if request.user.userprofile.status != 'teacher': return redirect('Penelope.views.home') How I'm tring to test : def login_function(self, username, password, status): # Create a new user user = User.objects.create_user(username=username, password=password) user.userprofile.status = status user.save() # Use test client to perform login user = self.client.login(username=username, password=password) response = self.client.post('/login/') class LoggedAsTeacherCase(TestCase): def setUp(self): # I create and log with a teacher user login_function(self, 'teststudent', 'password', 'teacher') def test_login(self): # Verify if login has been validated by server response = self.client.get('/login/') self.assertRedirects(response, '/') #
nlassaux
1

голосов
2

ответ
95

Просмотры

запускать каждый TestCase внутри модуля

Как вы можете запустить тесты из всех классов TestCase, в конкретном модуле под пакетом тестов? В проекте Django, я разделить tests.py по тестам / Каждый файл (модуль) имеет несколько классов TestCase, и каждый из них имеет несколько методов тестирования. init.py импортирует каждый из них. Я уже знаю, что я могу сделать это: Выполнить все испытания: ./manage.py тест MyApp Или запустить конкретную TestCase: ./manage.py тест myapp.OneOfManyTestCase Или запустить очень конкретный метод испытания от класса TestCase: ./manage. ру тест myapp.OneOfManyTestCase.test_some_small_method Однако, я не могу понять, как запустить каждый TestCases от конкретного модуля. Скажем, OneOfManyTestCase класс от тестов / lot_of_test.py, есть и другие тестовые случаи тоже. Джанго, кажется, не заботится о модулях с TestCases. Как я могу запустить все TestCases внутри lot_of_test?
Jang-hwan Kim
1

голосов
1

ответ
526

Просмотры

django not running tests after adding south

Я прийти через вопрос, я считаю, это проблема с Джанго Югом, SQLite и тестирования. Мои тесты, используемые для работы, прежде чем Юг были введены в приложение. Я использовал, чтобы использовать SQLite в памяти и все работало нормально. Теперь с югом я получаю ошибку говоря один из моих таблиц БД уже существует, и он выходит из строя. Здесь ошибка:> питон протоколы испытаний manage.py --settings = bionetbook.settings.test Создание тестовой базы данных для псевдонимом «по умолчанию» ... /Projects/project/app/venv/lib/python2.7/site-packages /django/db/models/fields/__init__.py:808: RuntimeWarning: DateTimeField получил наивные DateTime (2013-08-09 00:00:00) а поддержка часового пояса активна. RuntimeWarning) FATAL ERROR - Следующий SQL-запрос не удалось: CREATE TABLE "stuff_stuff" ( "ID" целое NOT NULL PRIMARY KEY, "создал" DateTime NOT NULL, "Модифицированный" DateTime NOT NULL, "идентификатор_пользователь" целое число NOT NULL, "старт" DateTime NOT NULL, "название" VARCHAR (255) NOT NULL, "данные" текст NULL, "пробковый" VARCHAR (255) NULL); Ошибка: таблица «stuff_stuff» уже существует! Обнаружена ошибка при реальном пробеге миграции! Aborting. ! Поскольку у вас есть база данных, которая не поддерживает работу! Схема изменяющего заявления в сделках, мы были! оставить его в промежуточном состоянии между миграциями. ! Вы * возможно * быть в состоянии восстановить с: = DROP TABLE "stuff_stuff"; [!] Южные разработчики сожалеют это произошло, и будут! хотел бы мягко убедить Вас рассмотреть немного! проще в сделке, с СУБД (которая поддерживает DDL транзакции)! Примечание: ошибка, которая вызвала миграцию на провал далее вверх. Ошибка миграции: материал: 0003_initial Могу ли я спиннинг мои колеса пытаются сделать эти три работы вместе? Есть ли Юг не нравится Test Tools и SQLite?
renderbox
1

голосов
1

ответ
366

Просмотры

не Джанго контекст ответа пас ни

В моем браузере, все отлично. До тех пор пока я не сделать тест здесь мои опросы / views.py от django.shortcuts импорта делают из polls.models импорта индекса põll DEF (запрос):. Latest_poll_list = Poll.objects.all () order_by ( '-') pub_date контекст = { 'latest_poll_list': latest_poll_list} вернуть визуализации (запрос, опрос / index.html ', контекст) опросы / шаблоны / опросы / index.html {%, если latest_poll_list%} {% для опроса в latest_poll_list%} {{poll.question }} {% ENDFOR%} {%}% еще нет Poll Доступно {% ENDIF%} и мои опросы / tests.py от django.test импорта TestCase из django.core.urlresolvers не импортировать обратный класс SimpleTest (TestCase): Защита test_this ( самостоятельно): ответ = self.client.get (обратный ( 'polls.views.index')) печати response.context ответ печати.
1

голосов
1

ответ
335

Просмотры

Джанго 1.6 приложения tests.py подкаталога тестов

с Джанго 1.6, у меня есть приложение Джанго с tests.py приложением файла - tests.py в этом файле я проверил некоторые функции управления от management.commands.getevents импорта some_function, когда я пытаюсь изменить tests.py в каталог тестов с Дифференц тестами файлы приложений - тесты - __init__.py - test_models.py - test_views.py - test_managements.py я и попробуйте запустить тест manage.py тест питон получить эту ImportError ошибку: Не удалось импортировать тестовый модуль: events.tests. test_managements ... ImportError: нет модуль с именем management.commands ... с каталогом тестовых файлов, почему Джанго не видит модуль управления?
JuanPablo
1

голосов
1

ответ
418

Просмотры

Как использовать уровень детализации в тестах в Django

Запуск тестового случая Django позволяет указать подробность (0,1,2,3), как этот тест manage.py -v 2 myapp.tests.test_mycode.TestMyCode.test_func Как я могу получить флаг детальности в моем test_func
user
1

голосов
1

ответ
148

Просмотры

Основы тестовых сигналов в Django

Я новичок в тестирование в Django, и мне было интересно, как писать тесты для сигналов. Я подошел к документации, но я не мог найти что-нибудь полезное. Давайте предположим, что есть простой сигнал pre_save для модели резервирования и я хочу, чтобы изменить некоторые атрибуты перед сохранением в базе данных. Мой код выглядит следующим образом: @receiver (pre_save, отправитель = Reservation) Защита set_destination_type (отправитель, экземпляр * ARGS ** kwargs): точки = [ 'Нью-Йорк', 'Рим', 'Париж'], если instance.destination в баллах: instance.international = True instance.international = False Как бы подойти к этому? Должен ли я просто создать бронирование и утверждают, что правильное значение было установлено? Как проверить я эту функцию в изоляции? Я действительно не знаю, как начать. Спасибо!
intelis
1

голосов
2

ответ
237

Просмотры

отходы тестировании Django слишком много времени на создании тестовой базы данных

Мы стараемся охватить тесты на старом, большой проект, который имеет более 500 таблиц в базе данных, и тратить слишком много времени на базе создания (более чем на 1 час на моем RMBP) и DB миграции. Мы используем PostgreSQL в качестве базы данных, вызвать ГИС о службе в ней нуждается, так что трудно использовать SQLite, чтобы заменить его. Что я могу сделать, чтобы уменьшить время на тестирование препарата?
kxxoling
1

голосов
1

ответ
419

Просмотры

Наследование Крепеж в Джанго TestCase

У меня есть очень простой сценарий из django.test класса импорта TestCase BaseTest (TestCase): светильники = ( 'users.json',) ... класс SpecificTest (BaseTest): светильники = ( 'transactions.json') ... сделки имеет FK для пользователей и когда SpecificTest пытается загрузить светильники я получаю IntegrityError IntegrityError: Проблема установки светильников: строка в таблице «app_transactions» с первичным ключом «1» имеет недопустимый внешний ключ: app_transactions.user_id содержит значение ' 30' , который не имеет соответствующее значение в app_user.id. Эта ошибка означает, что users.json приспособление загружается в BaseTest не было загружено до transactions.json светильников (как можно было бы ожидать). Мой вопрос, что такое правильный способ загрузки светильников, когда подклассов тесты? Django 1.7
haki
1

голосов
2

ответ
56

Просмотры

Почему тест неудача в Django, когда он возвращается в Python Правды intrepreter?

Когда я запускаю этот код в Python интерпретатор, он возвращает True: >>> из movies.models импортировать фильм >>> movie_list = Movie.objects.all () >>> BOOL (movie_list) Правда Когда я запускаю мой тестовый случай, python3 manage.py тест кино, он не: от django.test импорта TestCase из .models импорта класса Movie QuestionMethodTests (TestCase): Защита test_movie_list_empty (сам): movie_list = Movie.objects.all () self.assertEqual (BOOL (movie_list) , True) Что мне не хватает? тест не должен проходить?
Nitin Savant
1

голосов
1

ответ
319

Просмотры

Django Forms - Can't raise validation error in tests

Я изо всех сил, чтобы получить мои тесты, чтобы бросить ошибка проверки формы в Django. Это с использованием типов ввода стандарта / по умолчанию. # Forms.py класс NewUserForm (forms.Form): first_name = floppyforms.CharField (виджет = floppyforms.TextInput (ATTRS = { 'класс': 'форма-управления вводом-LG', 'заполнитель': 'Имя'}) ), last_name = floppyforms.CharField (виджет = floppyforms.TextInput (ATTRS = { 'класс': 'форма контроля ввода-Л.Г.', 'заполнители': 'Фамилия'})), электронная почта = forms.EmailField (), Мобильный = floppyforms.CharField (требуется = false, виджет = floppyforms.TextInput (ATTRS = { 'класс': 'форма-управления вводом-LG', 'заполнитель': 'Мобильный телефон', 'автозаполнения': 'ложь'}) ), почтовый индекс = floppyforms.CharField (виджет = floppyforms. мобильный ': '0412345678', 'почтовый индекс': '00000', 'relationship_status': 'S', 'super_balance': '100000', 'current_super_provider': '49'} ... Защиту test_invalid_fields (самостоятельно): форма = NewUserForm ({}) self.assertFalse (form.is_valid ()) # правильные данные = self.valid_data данные [ 'электронная почта'] = 24234 # это поле должно обязательно форма = NewUserForm (данные) form.is_valid () # возвращает ИСТИНА, когда Я прохожу пустой словарь в исходной форме. form.errors отображает { 'super_balance': [ 'Это поле является обязательным.']}. Это более запутанное, поскольку в документации говорится, что, если явно не заявлено, то предполагается, потребуются все поля. Я использую 1.8.
Jamie Strauss
1

голосов
2

ответ
750

Просмотры

S3BotoStorage и модульное тестирование

Я использую storages.backends.s3boto.S3BotoStorage для моего DEFAULT_FILE_STORAGE в проекте Django. В идеале я хотел бы использовать либо FileSystemStorage по умолчанию во время модульных тестов или, возможно, создать временный ковш, который удален на завершении испытаний. Что является лучшим способом для достижения этой цели?
Alex Rothberg
1

голосов
3

ответ
445

Просмотры

Ошибка при выполнении тестов Django

Я пытаюсь запустить Django тесты (версия 1.8), но я получаю эту ошибку из django.test класса импорта TestCase JobTypesResourceTest (TestCase): нАлАдкА четкости (Self): TestCase.setUp (сам) Защитой test_basicGet (я): возвращает истинное TraceBack (самый последний вызов последнего): Файл "C: \ Users \ пользователь \ .p2 \ пул \ Plugins \ org.python.pydev_4.4.0.201510052309 \ pysrc \ runfiles.py", строка 234, в основной () Файл «C : \ Users \ пользователь \ .p2 \ пул \ Plugins \ org.python.pydev_4.4.0.201510052309 \ pysrc \ runfiles.py», строка 78, в главном возвращение pydev_runfiles.main (конфигурация) # Примечание: по-прежнему не возвращает собственное значение. Файл "C: \ Users \ Пользователь \ .p2 \ пул \ Plugins \ org.python.pydev_4.4.0.201510052309 \ pysrc \ pydev_runfiles.py", строка 835, в главном PydevTestRunner (конфигурации) .run_tests () Файл «C: \ Users \ пользователь \ .p2 \ пул \ Plugins \ org.python.
Willette Lynch
1

голосов
2

ответ
818

Просмотры

Джанго ошибка тестирования все-аутентификации - django.db.utils.OperationalError: нет такой таблицы: socialaccount_openidstore

can anyone help with this Django allauth issue? I'm running Django 1.8 with Python 3 in a virtualenv. I've got allauth installed and working OK in my project but I get an error message when I try and run any tests. Here is the simplest replication of the error I can get: I create a new project, then download the django-allauth .zip file and copy the allauth directory into my project directory. I add the following apps to INSTALLED_APPS in settings: 'django.contrib.sites', 'allauth', 'allauth.account', 'allauth.socialaccount', 'allauth.socialaccount.providers.facebook', then run python manage.py migrate. So far so good, but when I run python manage.py test I get the following error: Traceback (most recent call last): File "/Users/AGG/Dropbox/env/lib/python3.4/site-packages/django/db/backends/utils.py", line 64, in execute return self.cursor.execute(sql, params) File "/Users/AGG/Dropbox/env/lib/python3.4/site-packages/django/db/backends/sqlite3/base.py", line 318, in execute return Database.Cursor.execute(self, query, params) sqlite3.OperationalError: no such table: socialaccount_openidstore The above exception was the direct cause of the following exception: Traceback (most recent call last): File "./manage.py", line 10, in execute_from_command_line(sys.argv) File "/Users/AGG/Dropbox/env/lib/python3.4/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line utility.execute() File "/Users/AGG/Dropbox/env/lib/python3.4/site-packages/django/core/management/__init__.py", line 330, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/Users/AGG/Dropbox/env/lib/python3.4/site-packages/django/core/management/commands/test.py", line 30, in run_from_argv super(Command, self).run_from_argv(argv) File "/Users/AGG/Dropbox/env/lib/python3.4/site-packages/django/core/management/base.py", line 390, in run_from_argv self.execute(*args, **cmd_options) File "/Users/AGG/Dropbox/env/lib/python3.4/site-packages/django/core/management/commands/test.py", line 74, in execute super(Command, self).execute(*args, **options) File "/Users/AGG/Dropbox/env/lib/python3.4/site-packages/django/core/management/base.py", line 441, in execute output = self.handle(*args, **options) File "/Users/AGG/Dropbox/env/lib/python3.4/site-packages/django/core/management/commands/test.py", line 90, in handle failures = test_runner.run_tests(test_labels) File "/Users/AGG/Dropbox/env/lib/python3.4/site-packages/django/test/runner.py", line 210, in run_tests old_config = self.setup_databases() File "/Users/AGG/Dropbox/env/lib/python3.4/site-packages/django/test/runner.py", line 166, in setup_databases **kwargs File "/Users/AGG/Dropbox/env/lib/python3.4/site-packages/django/test/runner.py", line 370, in setup_databases serialize=connection.settings_dict.get("TEST", {}).get("SERIALIZE", True), File "/Users/AGG/Dropbox/env/lib/python3.4/site-packages/django/db/backends/base/creation.py", line 376, in create_test_db self.connection._test_serialized_contents = self.serialize_db_to_string() File "/Users/AGG/Dropbox/env/lib/python3.4/site-packages/django/db/backends/base/creation.py", line 413, in serialize_db_to_string serializers.serialize("json", get_objects(), indent=None, stream=out) File "/Users/AGG/Dropbox/env/lib/python3.4/site-packages/django/core/serializers/__init__.py", line 129, in serialize s.serialize(queryset, **options) File "/Users/AGG/Dropbox/env/lib/python3.4/site-packages/django/core/serializers/base.py", line 52, in serialize for obj in queryset: File "/Users/AGG/Dropbox/env/lib/python3.4/site-packages/django/db/backends/base/creation.py", line 409, in get_objects for obj in queryset.iterator(): File "/Users/AGG/Dropbox/env/lib/python3.4/site-packages/django/db/models/query.py", line 238, in iterator results = compiler.execute_sql() File "/Users/AGG/Dropbox/env/lib/python3.4/site-packages/django/db/models/sql/compiler.py", line 829, in execute_sql cursor.execute(sql, params) File "/Users/AGG/Dropbox/env/lib/python3.4/site-packages/django/db/backends/utils.py", line 64, in execute return self.cursor.execute(sql, params) File "/Users/AGG/Dropbox/env/lib/python3.4/site-packages/django/db/utils.py", line 97, in __exit__ six.reraise(dj_exc_type, dj_exc_value, traceback) File "/Users/AGG/Dropbox/env/lib/python3.4/site-packages/django/utils/six.py", line 658, in reraise raise value.with_traceback(tb) File "/Users/AGG/Dropbox/env/lib/python3.4/site-packages/django/db/backends/utils.py", line 64, in execute return self.cursor.execute(sql, params) File "/Users/AGG/Dropbox/env/lib/python3.4/site-packages/django/db/backends/sqlite3/base.py", line 318, in execute return Database.Cursor.execute(self, query, params) django.db.utils.OperationalError: no such table: socialaccount_openidstore I've tried deleting the database or project and starting again. I can't find this issue elsewhere on StackOverflow. Extra information: the error goes away if I delete the tests files in allauth or comment out 'allauth.socialaccount' in INSTALLED_APPS. I'm very confused about the "openidstore" table - is it something to do with the migrations in allauth/socialaccount/providers/openid?
birophilo
1

голосов
1

ответ
1.3k

Просмотры

Django Rest Framework test fails: Expected view to be called with a URL keyword argument

Я бегу тестов на UserDetail зрения, написанный с использованием рамки Django Rest. urls.py URL (г '^ апи / пользователи /', включают в себя ( 'calorie_counter.users.urls', пространство имен = 'пользователей')), пользователи / urls.py URL (г '^ (? Р [0-9] +) $», views.UserDetail.as_view (), имя = 'пользователь-деталь'), test_api.py BaseAPITestCase (APITestCase): Защита нАлАдкА (Я): self.superuser = User.objects.create_superuser ( 'админ', '[email protected]', 'johnpassword') self.client.login (имя пользователя = 'джон', пароль = 'johnpassword') self.user1 = User.objects.create (имя пользователя = "user1", пароль = "передача », электронная почта = "[email protected]") класс ReadUserTest (BaseAPITestCase): разрешения на чтение # проверка четкости test_user_can_read_self_detail (Я): URL =«/api/users/'+str(self.user1. ID) завод = APIRequestFactory () запрос = factory.get (URL) force_authenticate (запрос, self.user1) ответ = (UserDetail.as_view ()) (запрос) self.assertEqual (response.status_code, status.HTTP_200_OK) Однако, бег этот тест дает мне следующее сообщение об ошибке. «Рк» agrument не получает передается зрения UserDetail. AssertionError: Ожидаемый вид UserDetail быть вызван с аргументом URL ключевого слова с именем «рк». Исправьте URL конф, или установить .lookup_field атрибут зрения правильно. Как проверить представления с аргументами URL? UPDATE: Теперь, используя APIClient вместо завода .. Защиту test_user_can_read_self_detail (Я): клиент = APIClient () client.login (имя пользователя = 'user1', пароль = 'передача') # ответ = self.client.get ( '/ API / пользователей /», { 'рк': self.user. идентификатор}) ответ = client.get ( '/ API / пользователей /' ул (self.user1.id +)) self.assertEqual (response.status_code, status.HTTP_200_OK) Теперь я получаю следующее сообщение об ошибке: AttributeError: 'AnonymousUser' объект не имеет атрибута «is_manager», где является менеджером является атрибутом моей пользовательской модели пользователя. Я предполагаю, что есть какая-то проблема с проверкой подлинности клиента. У меня включена проверка подлинности сеанса. Тем не менее получаю эту ошибку. UPDATE: Мой Логин не работал APICLient, потому что я создавал пользователь, используя User.objects.create вместо User.objects.create_user. Изменение, что устранило проблему. :) is_manager»где менеджер является атрибутом моей пользовательской модели пользователя. Я предполагаю, что есть какая-то проблема с проверкой подлинности клиента. У меня включена проверка подлинности сеанса. Тем не менее получаю эту ошибку. UPDATE: Мой Логин не работал APICLient, потому что я создавал пользователь, используя User.objects.create вместо User.objects.create_user. Изменение, что устранило проблему. :) is_manager»где менеджер является атрибутом моей пользовательской модели пользователя. Я предполагаю, что есть какая-то проблема с проверкой подлинности клиента. У меня включена проверка подлинности сеанса. Тем не менее получаю эту ошибку. UPDATE: Мой Логин не работал APICLient, потому что я создавал пользователь, используя User.objects.create вместо User.objects.create_user. Изменение, что устранило проблему. :)
Ajax

Просмотр дополнительных вопросов

Связанные вопросы