用参数模拟Django视图中使用的模型

2024-05-08 01:17:33 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的一生中,我无法理解这一点,我也很难找到关于它的信息。在

我有一个Django视图,它接受一个作为主键的参数(例如:URL/problem/12),并加载一个包含参数模型信息的页面。在

我想模仿我的视图用于测试的模型,但我无法理解,这是我尝试过的:

@patch('apps.problem.models.Problem',)
def test_search_response(self, problem, chgbk, dispute):
    problem(problem_id=854, vendor_num=100, chgbk=122)

    request = self.factory.get(reverse('dispute_landing:search'))
    request.user = self.user
    request.usertype = self.usertype

    response = search(request, problem_num=12)

    self.assertTemplateUsed('individual_chargeback_view.html')

然而,我永远无法让测试真正找到问题号,就好像模型不存在一样。在


Tags: django模型self视图信息search参数response
1条回答
网友
1楼 · 发布于 2024-05-08 01:17:33

我认为这是因为如果你模仿整个模型本身,那么这个模型就不存在了,因为任何创建/保存它的函数都会被模仿。如果Problem只是一个未经任何方式修改的模拟模型类,那么它对与数据库、ORM或任何可以从search()方法中发现的内容一无所知。在

你可以采取一种方法,而不是嘲笑模型本身,那就是创建工厂男孩模型工厂。由于每次测试运行都会破坏测试数据库,因此这些工厂是创建测试数据的好方法:

http://factoryboy.readthedocs.io/en/latest/

你可以像这样开一个问题工厂:

class ProblemFactory(factory.Factory):
    class Meta:
        model = Problem

    problem_id = factory.Faker("pyint")
    vendor_num = factory.Faker("pyint")
    chgbk = factory.Faker("pyint")

然后使用它创建一个实际存在于数据库中的模型:

^{pr2}$

相关问题 更多 >