断言 Django 中上传文件的存在

Asserting for presence of an uploaded file in Django

假设我有一个包含 FileField 的模型并且我刚刚创建了一个对象,因此将一个文件存储到特定位置。我如何断言文件存储在那里?

就我而言,我的 settings.py 中有 MEDIA_ROOT='/path/to/my/files/',文件确实存储在那里,但我想对其进行 "officially" 测试和验证。

我现在拥有的是;

uploaded_file = settings.MEDIA_ROOT+'/test_audio.mp3'
assert os.path.exists(uploaded_file)

这里的问题是,由于 Django 在测试后不会像模型的情况那样从该位置删除存储的文件,因此在第一次测试后文件会以名称更改的形式存储。我必须在每次测试前手动删除该文件。下面是我对当前断言语句的测试

class TestAudioFileManagement(TestCase):
def test_audio_upload(self):
    """
    Tests uploading of audio
    """
    User.objects.create_user(username="somename",
                        password="somepassword")
    self.client.login(username="somename",
                      password="somepassword")
    name = "somename"
    audio_file = SimpleUploadedFile(
        'test_audio.mp3', 
        open('/home/afzalsh/works/openradio/test_files/test_audio.mp3','rb').read(),
        content_type='audio'
    )
    self.client.post(reverse('actual_upload_audio'),
                     {'name':name,
                      'audio_file':audio_file})
    uploaded_file = settings.MEDIA_ROOT+'/test_audio.mp3'
    assert os.path.exists(uploaded_file)

有解决方案吗?

您可以在测试结束时使用 os.remove(uploaded_file)

将其删除