python - Pytest 对象未在更新视图中更新
问题描述
我的视图user_actions允许将用户设置为非活动状态。方法如下:
def user_update_details(request, username=None):
user = get_object_or_404(User, username=username)
if 'set_inactive' in request.POST:
user.is_active = False
user.save()
return redirect(reverse('dashboard_staff:user_details',
kwargs={'username': username}))
我经常使用这种简单的模式并且效果很好。我现在想测试一下。我的用户测试创建如下。
@pytest.fixture
def user(db) -> settings.AUTH_USER_MODEL:
return UserFactory()
和工厂类:
class UserFactory(DjangoModelFactory):
username = Faker("user_name")
email = Faker("email")
first_name = Faker("first_name")
last_name = Faker("last_name")
@post_generation
def password(self, create: bool, extracted: Sequence[Any], **kwargs):
password = Faker(
"password",
length=42,
special_chars=True,
digits=True,
upper_case=True,
lower_case=True,
).generate(extra_kwargs={})
self.set_password(password)
class Meta:
model = get_user_model()
django_get_or_create = ["username"]
这是失败的测试:
class TestUserActions:
url = "dashboard_staff:user_actions"
def test_set_user_inactive(self, user):
assert user.is_active
url = reverse(self.url, kwargs={'username': user.username})
resp = Client().post(url, data={'set_inactive': ''}, follow=True)
assert resp.status_code == 200
user.refresh_from_db()
assert user.is_active is False
和例外:
assert customer_manager.is_active
E assert False
E + where False = <Customer: Adrian Huynh>.is_active
解决方案
正如评论中所说,我找到了一种解决方法。follow=True
由于未知原因,如果我们使用参数,视图似乎不会更新实例。所以,为了测试它:
class TestUserActions:
url = "dashboard_staff:user_actions"
def test_set_user_inactive(self, user):
assert user.is_active
url = reverse(self.url, kwargs={'username': user.username})
resp = Client().post(url, data={'set_inactive': ''})
assert resp.status_code == 302
user.refresh_from_db()
assert user.is_active is False
我没有进行测试status_code == 200
,而是简单地检查了重定向以及实例是否正确更新。
推荐阅读
- php - 为什么我添加的所有内容都放在页面的右侧?
- android - 当片段在选项卡式活动中更改时,在片段中运行双计时器
- r - 在 R Shiny 中打印 R optim 函数输出
- jquery - 我可以用真实的信用卡测试贝宝沙盒吗?
- vba - Excel VBA 宏无法按预期工作
- ios - iOS Swift CollectionView 单元正在缩减
- f# - 具有至少一个元素的 F# 序列
- reactjs - Webpack 服务示例
- java - 编写时 XSSFWorkbook 使用 JDBC 在 Spring Boot 应用程序中创建损坏的 .xlsx 文档
- c# - 如何在 wpf 应用程序上使用 DictationRecognizer()?