无法通过数据库访问在测试设置对象中创建的对象

时间:2018-05-02 23:50:21

标签: django database testing

我有一个

let x = [1, 4, 2, 8, 5, 7] ++ x in 3 : x
3 : (let x = 1 : 4 : 2 : 8 : 5 : 7 : x in x)

初始化我需要的对象

 class TestReportModel(TestCase):

   @classmethod
    def setUpClass(cls):
        cls.report_id = 99
        cls.factory = RequestFactory()
        cls.user = User.objects.create(username="user1", password="password")
        cls.report = Report.objects.create()

在视图报告中

 def test_report_employee_with_access(self):
        request = self.factory.get('/reports/{}'.format(self.report_id))
        report = self.report
        report.user = request.user
        request.user = self.user
        response = report(request, self.report_id)
        self.assertEqual(response.status_code, 403)

我可以通过User.object.get获取我的用户(id = user_id)。根据我的模型,用户对报告一无所知。这就是为什么我无法得到像user.report这样的报告。我只能创建像Report.object.get(id = report_id)这样的数据库查询,但我得到一个空的查询集。我该如何解决?

1 个答案:

答案 0 :(得分:0)

不确定这是否是导致问题的原因,但可能会导致一些问题。在我的TestCase类中,我通常定义#standardSQL WITH `project.dataset.your_table` AS ( SELECT 1 id, 1000 start, 1001 `end`, 'ABC1' name, 'A' code UNION ALL SELECT 1, 1000, 1001, 'FSD1', 'B' UNION ALL SELECT 2, 1200, 1201, 'CC12', 'A' UNION ALL SELECT 3, 4000, 4002, 'GF41', 'B' UNION ALL SELECT 3, 4000, 4002, 'ML65', 'A' ) SELECT row.* FROM ( SELECT ARRAY_AGG(t ORDER BY code DESC LIMIT 1)[OFFSET(0)] row FROM `project.dataset.your_table` t GROUP BY id, start, `end` ) -- ORDER BY id ,但不定义setUp()。如果您这样做,请确保调用setUpClass方法。来自the docs

  

警告

     

SimpleTestCase及其子类(例如TestCase,...)依赖   setUpClass()和tearDownClass()执行一些全班   初始化(例如覆盖设置)。如果你需要覆盖   那些方法,别忘了调用超级实现

super方法负责设置数据库连接,因此如果不首先调用它,则不会访问测试数据库。