我有一个
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)这样的数据库查询,但我得到一个空的查询集。我该如何解决?
答案 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
方法负责设置数据库连接,因此如果不首先调用它,则不会访问测试数据库。