我正在使用,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) 我正在尝试使用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.
我在将数据发布到我的测试中使用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正确设置基本身份验证?