Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 断言错误:400!=201在测试用例之后运行APITestCase时_Python_Django_Django Rest Framework - Fatal编程技术网

Python 断言错误:400!=201在测试用例之后运行APITestCase时

Python 断言错误:400!=201在测试用例之后运行APITestCase时,python,django,django-rest-framework,Python,Django,Django Rest Framework,问题是: 我有两个独立的测试,一个基于Django的TestCase,另一个继承自ApitTestCase(Django Rest框架)。单独运行时不会出现错误,但当我在TestCase self之后运行APITestCase时,assertEqual(response.status\u code,status.HTTP\u 201\u CREATED)不再工作 以下是代码的一部分: class CalendarTests(APITestCase): def setUp(self):

问题是: 我有两个独立的测试,一个基于Django的TestCase,另一个继承自ApitTestCase(Django Rest框架)。单独运行时不会出现错误,但当我在TestCase self之后运行APITestCase时,assertEqual(response.status\u code,status.HTTP\u 201\u CREATED)不再工作

以下是代码的一部分:

class CalendarTests(APITestCase):
    def setUp(self):
        self.user = User.objects.create_user(
            email='test@test.com', password='secret', username='tester')
        self.calendar = Calendar(owner=self.user, caltype='p', name='Test Calendar')
        self.calendar.save();

    def test_api_create_bla(self):
        self.client.login(username='test@test.com', password='secret')
        url = reverse('calendar-api')
        data_initial = {'text': 'testing hurray', 'cal_date':'2015-03-15', 'calendar':1}
        data_expected = {'cal_date': '2015-03-15',
                         'text': u'testing hurray',
                         'otype': 'd', 
                         'owner': u'tester', 
                         'calendar': 1,
                         'id': 1}

        response = self.client.post(url, data_initial, format='json')
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertEqual(response.data, data_expected)
        self.client.logout()

感谢您的帮助。

好的,伙计们,谢谢,我已经解决了。 通过打印响应对象,我发现日历id是错误的。由于我在InnoDB中使用MySQL(可能必须切换到PostreSQL),IntegrityError“无法添加或更新子行:外键约束失败”在第二次测试中导致了奇怪的行为。帮助我的解决方案是通过以下方式将settings.py从InnoDB引擎切换到MyISAM:

db_options = "INNODB"
import sys
if 'test' in sys.argv:
    db_options = "MYISAM"

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'callist',     
       'USER': 'test',
       'PASSWORD': 'test',
       'HOST': 'localhost',               
       'PORT': '80',                      
       'OPTIONS': {'init_command': 'SET storage_engine=' + db_options},
    }
}
将考虑切换到PostreSQL。
感谢那些试图帮助您的人。

您收到了400条回复(请求错误)。您应该打印出
request.data
,以便进一步诊断。发布相应的视图。没有请求对象(或者是否存在?),但打印响应时显示日历id无效。最后,问题出在我使用InnoDB时的MySQL IntegrityError和ForeignKeys中。我找到的解决方案是在运行测试时使用MyISAM。谢谢,@KlausD,你说得对,响应对象包含请求。(仔细阅读文档即可)