pytest scope =“模块”夹具不会在测试模块后删除模型实例

问题描述

我在测试文件中的scope ='module'的夹具中创建消息实例。但是当测试到达另一个模块时,该消息实例仍存在于数据库中。

在... / apps / dialogs / test / api / test_message.py中

@pytest.fixture(scope='module')
def message_by_auth_user(django_db_setup,django_db_blocker,message_factory: type,user_factory: type,user_with_auth: User) -> Message:
    """Return message by auth user."""
    with django_db_blocker.unblock():
        message = message_factory(written_by=user_with_auth)  # Message object (1)
        message_text = message.message  # 'text_message_№_1'
        return message

在... / apps / users / test / api / test_users.py


@pytest.mark.django_db
def test_get_users_view_with_filter(bool_value: bool,user_count_change: int,filter_pattern: str,api_auth_client: apiclient,user_with_auth: User,user_factory: type):
    message_count = Message.objects.all().count()  # 1
    message = Message.objects.first()  # Message object (1)
    message_text = message.message # 'text_message_№_1'

更新

在我用“ yield”替换“ return”之后,并且在“ yield”之后,我手动删除了该对象,一切正常。但是测试是否应该像我的其他装置那样自动执行呢?例如,如果scope ='function',则测试会自动删除对象(每次测试之后),而不会产生任何'yield'

如果未手动删除消息实例,则即使整个scope ='module',它也将存在于整个会话中。为什么会这样?

@pytest.fixture(scope='module')
def message_by_auth_user(django_db_setup,user_with_auth: User) -> Message:
    """Return message by auth user."""
    with django_db_blocker.unblock():
        message = message_factory(written_by=user_with_auth)
        yield message
        message.delete()  # This code is executed when fixture run teardown,after testing current module

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...