标签: django-tests

在运行测试用例时,我将收到此错误:psycopg2.OperationalError:游标"_django_curs_140351416325888_23"不存在

我想要运行下面出现错误的测试用例.

运行commond:python manage.py test

如果您想尝试删除测试数据库'test_project_management_db',请输入'yes',或者取消'no'取消:是为别名'default'销毁旧测试数据库...

Traceback (most recent call last):
  File "manage.py", line 24, in <module>
    execute_from_command_line(sys.argv)
  File "/home/rails/Desktop/projects/envs/project_manage_env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 363, in execute_from_command_line
    utility.execute()
  File "/home/rails/Desktop/projects/envs/project_manage_env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 355, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/rails/Desktop/projects/envs/project_manage_env/local/lib/python2.7/site-packages/django/core/management/commands/test.py", line 29, in run_from_argv
    super(Command, self).run_from_argv(argv)
  File "/home/rails/Desktop/projects/envs/project_manage_env/local/lib/python2.7/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/home/rails/Desktop/projects/envs/project_manage_env/local/lib/python2.7/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/home/rails/Desktop/projects/envs/project_manage_env/local/lib/python2.7/site-packages/django/core/management/commands/test.py", line 62, in handle
    failures = test_runner.run_tests(test_labels)
  File "/home/rails/Desktop/projects/envs/project_manage_env/local/lib/python2.7/site-packages/django/test/runner.py", line 601, in run_tests
    old_config = self.setup_databases()
  File "/home/rails/Desktop/projects/envs/project_manage_env/local/lib/python2.7/site-packages/django/test/runner.py", line 546, …
Run Code Online (Sandbox Code Playgroud)

python django postgresql django-tests

12
推荐指数
2
解决办法
3274
查看次数

如何避免在django中创建测试数据库进行测试?

我在运行这些测试用例时为我的项目编写了一些测试用例,每次在给出消息然后销毁数据库之后创建别名'default'的测试数据库.我只关注消息,所以如何避免创建测试数据库,因为它需要很多时间.

username$ ./manage.py test
...............
Some message, I Want only this message 
...............
Creating test database for alias 'default'...
----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK
Destroying test database for alias 'default'...
Run Code Online (Sandbox Code Playgroud)

django django-tests

11
推荐指数
2
解决办法
6366
查看次数

Django Rest Framework API 客户端自定义标头

我正在尝试使用来自 drf-extensions 的批量更新。为了使其工作,有一个安全措施需要标题“X-BULK-OPERATION”:'true'。我可以使用 curl 或我的 angular 应用程序使应用程序正常工作,但在我的测试中,我试图rest_framework.test.APIClient用来发送 partial_update 请求,但每次我收到 400 响应时,在调试请求时,我都会收到

ipdb> response.data
{'detail': "Header 'X-BULK-OPERATION' should be provided for bulk operation."}
Run Code Online (Sandbox Code Playgroud)

这是我尝试在测试中使用的请求

    response = self.client.patch(
        '/api/v1/db_items/?active=True',
        json.dumps(data),
        content_type='application/json',
        **{X-BULK-OPERATION: 'true'}
    )
Run Code Online (Sandbox Code Playgroud)

有没有办法在 APIClient 请求上设置标头?

我什至尝试更改标题名称并将其设置在凭据中

self.client.credentials(HTTP_BULK_OPERATION='true')
Run Code Online (Sandbox Code Playgroud)

但我每次都会遇到同样的错误

django-rest-framework django-tests drf-extensions

11
推荐指数
3
解决办法
5833
查看次数

断言django测试中两个对象列表相同

有没有办法在django测试中检查两个对象列表是否相等.

让我说我有一些模型:

class Tag(models.Model):
    slug = models.SlugField(max_length=50, unique=True)
    def __unicode__(self):
        return self.slug
Run Code Online (Sandbox Code Playgroud)

我运行这个简单的测试:

def test_equal_list_fail(self):
    tag_list = []
    for tag in ['a', 'b', 'c']:
        tag_list.append(Tag.objects.create(slug=tag))

    tags = Tag.objects.all()

    self.assertEqual(tag_list, tags)
Run Code Online (Sandbox Code Playgroud)

这失败了:

======================================================================
FAIL: test_equal_list_fail (userAccount.tests.ProfileTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "path/to/tests.py", line 155, in test_equal_list_fail
    self.assertEqual(tag_list, tags)
AssertionError: [<Tag: a>, <Tag: b>, <Tag: c>] != [<Tag: a>, <Tag: b>, <Tag: c>]

----------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

这将工作:

def test_equal_list_passes(self):
    tag_list = []
    for tag in ['a', 'b', 'c']:
        tag_list.append(Tag.objects.create(slug=tag))

    tags = Tag.objects.all() …
Run Code Online (Sandbox Code Playgroud)

django django-testing django-tests

10
推荐指数
1
解决办法
6669
查看次数

什么是Python中的assertEquals?

我在django中有以下test.py文件.你能解释一下这段代码吗?

from contacts.models import Contact
...
class ContactTests(TestCase):
    """Contact model tests."""

    def test_str(self):

        contact = Contact(first_name='John', last_name='Smith')

        self.assertEquals(
            str(contact),
            'John Smith',
        )
Run Code Online (Sandbox Code Playgroud)

python django django-tests

9
推荐指数
2
解决办法
4万
查看次数

用临时数据库启动django shell

我想用一个临时数据库启动django shell(就像做django测试时所做的那样)

有没有像这样的命令:

python manage.py testshell
Run Code Online (Sandbox Code Playgroud)

在哪里我可以创建一堆虚假模型而不污染我的数据库?

django django-tests

8
推荐指数
1
解决办法
1549
查看次数

工厂男孩:定义依赖于其他领域的领域

如何定义依赖于其他字段使用的字段factory-boy

例如,我想定义一个email取决于first namelast nameUser.

我尝试使用post_generation装饰器.但是,我的系统需要在创建实例之前定义电子邮件.

django django-testing factory-boy django-tests

8
推荐指数
1
解决办法
2126
查看次数

KeyError:运行django测试时的'HTTP_HOST'

我是单元测试的新手,所以我不知道我做错了什么.我在Django1.8中使用python2.7

我跑的时候

python manage.py test myapp --keepdb
Run Code Online (Sandbox Code Playgroud)

我明白了

======================================================================
ERROR: test_view_content (myproject.news.tests.test_views.EntryTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/zoli/projects/project_dict/myproject/news/tests/test_views.py", line 27, in test_view_content
    response = client.get(reverse('news_list', kwargs={'page': 1}))
  File "/home/zoli/.virtualenvs/project_dict/local/lib/python2.7/site-packages/django/test/client.py", line 500, in get
    **extra)
  File "/home/zoli/.virtualenvs/project_dict/local/lib/python2.7/site-packages/django/test/client.py", line 303, in get
    return self.generic('GET', path, secure=secure, **r)
  File "/home/zoli/.virtualenvs/project_dict/local/lib/python2.7/site-packages/django/test/client.py", line 379, in generic
    return self.request(**r)
  File "/home/zoli/.virtualenvs/project_dict/local/lib/python2.7/site-packages/django/test/client.py", line 466, in request
    six.reraise(*exc_info)
  File "/home/zoli/.virtualenvs/project_dict/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 108, in get_response
    response = middleware_method(request)
  File "/home/zoli/projects/project_dict/myproject/middleware/multihostname.py", line 18, in process_request
    host = request.META['HTTP_HOST'].split(':')[0] …
Run Code Online (Sandbox Code Playgroud)

python django django-testing django-tests

8
推荐指数
1
解决办法
3538
查看次数

Django抽象模型+数据库迁移:测试抛出"不能ALTER TABLE,因为它有待处理的触发事件"

我想编写一个抽象模型mixin,我可以使用它来创建OneToOne - 与用户模型的关系.这是我的代码:

from django.conf import settings
from django.db import models


class Userable(models.Model):
    user = models.OneToOneField(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE
    )

    class Meta:
        abstract = True
Run Code Online (Sandbox Code Playgroud)

我为这个模型编写了以下测试:

class TestUserable(TestCase):

    mixin = Userable

    def setUp(self):
        user = User.objects.create_user(
            email="testuser@test.com",
            name="Test User",
            password="test1234test"
        )
        self.user = user
        self.model = ModelBase(
            '__TestModel__' + self.mixin.__name__, (self.mixin,),
            {'__module__': self.mixin.__module__}
        )

        with connection.schema_editor() as schema_editor:
            schema_editor.create_model(self.model)

    def test_user(self):
        self.model.objects.create(user=self.user)
        self.assertEqual(self.model.objects.count(), 1)

    def tearDown(self):
        with connection.schema_editor() as schema_editor:
            schema_editor.delete_model(self.model)
Run Code Online (Sandbox Code Playgroud)

我的问题是,在它的tearDown()方法中的这个测试抛出了以下错误:

django.db.utils.OperationalError: cannot DROP TABLE "core___testmodel__userable" because it …
Run Code Online (Sandbox Code Playgroud)

django django-models django-testing django-tests django-migrations

8
推荐指数
1
解决办法
503
查看次数

如何在 django TestCase 中使用 pytest 固定装置

如何在TestCase方法中使用 pytest 固定装置?类似问题的几个答案似乎暗示我的例子应该有效:

import pytest

from django.test import TestCase
from myapp.models import Category
  
pytestmark = pytest.mark.django_db

@pytest.fixture
def category():
    return Category.objects.create()
  
class MyappTests(TestCase):
    def test1(self, category):
        assert isinstance(category, Category)
Run Code Online (Sandbox Code Playgroud)

但这总是会导致错误:

TypeError: test1() missing 1 required positional argument: 'category'
Run Code Online (Sandbox Code Playgroud)

我意识到我可以将这个简单的例子转换成一个函数,它会起作用。我更喜欢使用 django,TestCase因为它支持导入传统的“django fixture”文件,这是我的几个测试所需要的。将我的测试转换为函数需要重新实现这个逻辑,因为没有记录的方式使用 pytest(或 pytest-django)导入“django 固定装置”

包版本

Django==3.1.2
pytest==6.1.1
pytest-django==4.1.0
Run Code Online (Sandbox Code Playgroud)

python django pytest django-tests pytest-django

7
推荐指数
2
解决办法
1140
查看次数