功能测试失败,不更新数据库

时间:2016-07-26 15:24:24

标签: python django django-testing django-tests

有我的功能:

views.py

def save(request):
    data = {'mark':request.POST.get('mark'), 'task':request.POST.get('task')}
    Task.objects.filter(id=request.POST.get('s')).update(mark=data['mark'], task=data['task'])
    return redirect(list)

我的测试有什么问题?它没有更新数据库。请帮助!!!

tests.py

from todo.models import Task
class TaskTest(TestCase):
def test_ok_update_task(self):
    s=1
    Task.objects.create(mark=True, task='task')
    data = {'mark': False, 'task': '1'}
    self.client.post('/save', data)
    task_1 = Task.objects.filter(id=s).get()
    self.assertNotEquals(task_1.mark, True)
    self.assertNotEquals(task_1.task, 'task')
    self.assertEquals(task_1.mark, data['mark'])
    self.assertEquals(task_1.task, data['task'])

models.py

class Task(models.Model):
    mark = models.NullBooleanField()
    task=models.CharField(max_length=200, null=True)
    up_url=models.CharField(max_length=1000, null=True)
    down_url=models.CharField(max_length=1000, null=True)
    update_url=models.CharField(max_length=1000, null=True)
    delete_url=models.CharField(max_length=1000, null=True)

1 个答案:

答案 0 :(得分:1)

您的视图希望request.POST['s']包含ID

Task.objects.filter(id=request.POST.get('s'))

但您忘记将其包含在数据中。

data = {'mark': False, 'task': '1'}

调试此类问题的一种简单方法是将print语句添加到视图和测试中。如果您已将print request.POSTprint request.POST.get('s')添加到模型中,那么您可能已经发现了问题。