相关疑难解决方法(0)

Django使用测试夹具测试FileField

我正在尝试为一些具有FileField的模型构建测试.该模型如下所示:

class SolutionFile(models.Model):
    '''
    A file from a solution.
    '''
    solution = models.ForeignKey(Solution)
    file = models.FileField(upload_to=make_solution_file_path)
Run Code Online (Sandbox Code Playgroud)

我遇到了两个问题:

  1. 使用时将数据保存到夹具时./manage.py dumpdata,不保存文件内容,只将文件名保存到夹具中.虽然我发现这是预期的行为,因为文件内容没有保存到数据库中,我想以某种方式将这些信息包含在夹具中进行测试.

  2. 我有一个用于上传文件的测试用例,如下所示:

    def test_post_solution_file(self):
        import tempfile
        import os
        filename = tempfile.mkstemp()[1]
        f = open(filename, 'w')
        f.write('These are the file contents')
        f.close()
        f = open(filename, 'r')
        post_data = {'file': f}
        response = self.client.post(self.solution.get_absolute_url()+'add_solution_file/', post_data,
                                    follow=True)
        f.close()
        os.remove(filename)
        self.assertTemplateUsed(response, 'tests/solution_detail.html')
        self.assertContains(response, os.path.basename(filename))
    
    Run Code Online (Sandbox Code Playgroud)

虽然此测试工作正常,但在完成后将上传的文件保留在媒体目录中.当然,删除可以照顾tearDown(),但我想知道Django是否有另一种处理方式.

我想到的一个解决方案是使用不同的媒体文件夹进行测试,必须与测试夹具保持同步.有没有办法在settings.py运行测试时指定另一个媒体目录?我可以在dumpdata中包含某种钩子,以便同步媒体文件夹中的文件吗?

那么,是否有更多的Pythonic或Django特定方式处理涉及文件的单元测试?

python django unit-testing django-testing filefield

24
推荐指数
2
解决办法
5092
查看次数

标签 统计

django ×1

django-testing ×1

filefield ×1

python ×1

unit-testing ×1