小编Jas*_*gan的帖子

expectedFailure被视为错误而非传递

我正在使用,expectedFailure因为有一个我想记录的错误,我现在无法解决,但希望将来再回来.我的理解expectedFailure是,它会将测试视为已通过,但在摘要中说有x个预期的失败(类似于它对跳过的tets的工作原理).

但是,当我运行我的测试套件时,我得到以下内容:

$ ./manage.py test eav.QueryTest
Creating test database for alias 'default'...
.EE
======================================================================
ERROR: test_q_object_with_exclude (eav.tests.managers.QueryTest)
----------------------------------------------------------------------
_ExpectedFailure

======================================================================
ERROR: test_q_objects_unioned (eav.tests.managers.QueryTest)
----------------------------------------------------------------------
_ExpectedFailure

----------------------------------------------------------------------
Ran 3 tests in 1.095s

FAILED (errors=2)
Destroying test database for alias 'default'...
Run Code Online (Sandbox Code Playgroud)

我不确定这是否属于Django的测试运行员或者我做错了什么.

@unittest.expectedFailure
def test_q_object_with_exclude(self):
    # Everyone except Bob
    q_set = eav_m.Process.objects.exclude(
        Q(eav__details__city__contains='Y'))
    self.assertEqual(q_set.count(), 4)
Run Code Online (Sandbox Code Playgroud)

python django unit-testing

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

你如何使用factory_boy来建模MongoEngine EmbeddedDocument?

我正在尝试使用factory_boy帮助为我的测试生成一些MongoEngine文档.我在定义EmbeddedDocumentField对象时遇到了麻烦.

这是我的MongoEngine Document:

class Comment(EmbeddedDocument):
    content = StringField()
    name = StringField(max_length=120)

class Post(Document):
    title = StringField(required=True)
    tags = ListField(StringField(), required=True)
    comments = ListField(EmbeddedDocumentField(Comment))
Run Code Online (Sandbox Code Playgroud)

这是我部分完成的factory_boy Factory:

class CommentFactory(factory.Factory):
    FACTORY_FOR = Comment
    content = "Platinum coins worth a trillion dollars are great"
    name = "John Doe"

class BlogFactory(factory.Factory):
    FACTORY_FOR = Blog
    title = "On Using MongoEngine with factory_boy"
    tags = ['python', 'mongoengine', 'factory-boy', 'django']
    comments = [factory.SubFactory(CommentFactory)] # this doesn't work
Run Code Online (Sandbox Code Playgroud)

任何想法如何指定comments字段?问题是工厂男孩试图创建CommentEmbeddedDocument.

python django mongoengine factory-boy

5
推荐指数
2
解决办法
761
查看次数

如何使用django_webtest的基本身份验证来访问Django REST框架?

我在将数据发布到我的测试中使用Django REST框架的一些视图时遇到了麻烦.我正在使用django_webtest来测试我的用户API.我遇到了以下代码的问题:

class UserApiTest(WebTest):

    def setUp(self):
        AdminFactory()

    def test_accessing_user_list_shows_one_user(self):
        user_list = self.app.get('/quickstart/users/', user='admin')
        assert_that(user_list.json, has_entry('count', 1))

    def test_posting_new_user_returns_url_for_user_detail(self):
        post_data = {'username': 'john', 'email': 'john.doe@example.com'} 
        user_create = self.app.post('/quickstart/users/', post_data, user='admin')
        url = 'http://localhost:80/quickstart/users/2/'
        assert_that(user_create.json, has_entry('url', url))
Run Code Online (Sandbox Code Playgroud)

问题是我在第二次测试运行时遇到CSRF错误.查看Django REST Framework文档,我读到只有在使用基于会话的身份验证时才会触发CSRF错误.所以,我想我会尝试基本身份验证,根据Django的文档,只需要设置REMOTE_USER环境变量:

class UserApiTest(WebTest):

    extra_environ = {'REMOTE_USER': 'admin'}

    def setUp(self):
        AdminFactory()

    def test_accessing_user_list_shows_one_user(self):
        user_list = self.app.get('/quickstart/users/')
        assert_that(user_list.json, has_entry('count', 1))

    def test_posting_new_user_returns_url_for_user_detail(self):
        post_data = {'username': 'john', 'email': 'john.doe@example.com'} 
        user_create = self.app.post('/quickstart/users/', post_data)
        url = 'http://localhost:80/quickstart/users/2/'
        assert_that(user_create.json, has_entry('url', url))
Run Code Online (Sandbox Code Playgroud)

这更糟糕,因为用户甚至没有被授权查看这些页面(即访问URL的返回403).

我的问题是:如何使用django_webtest正确设置基本身份验证?

python django-rest-framework django-webtest

3
推荐指数
1
解决办法
1692
查看次数