0
在urls.py我有我的看法详细与注释login_required转发未经授权的用户登录页面:Django的测试:如何为指定login_required当比较解析()与视功能的结果是视图
url(r'^(?P<id>[0-9]+)/$', login_required(views.detail), name = 'detail')
而我试图编写一个测试来检查在查询目标网址时选择哪个视图。我有一个类来登录测试开始之前:
class LoggedInTestCase(TestCase):
def setUp(self):
user = User.objects.create_user('test', '[email protected]', 'test')
self.client.login(username='test', password='test')
class ProductDetailTest(LoggedInTestCase):
def setUp(self):
super(ProductDetailTest, self).setUp()
def test_product_detail_url_resolves_product_detail_view(self):
view = resolve('/products/1/')
self.assertEquals(view.func, detail)
,当我运行测试,我得到:
FAIL: test_product_detail_url_resolves_product_detail_view (products.tests.ProductDetailTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "D:\heroku\django\products\tests.py", line 46, in test_product_detail_url_resolves_product_detail_view
self.assertEquals(view.func, detail)
AssertionError: <function detail at 0x05CC3780> != <function detail at 0x053B38A0>
----------------------------------------------------------------------
要检查哪些视图都解决了
print('VIEW: ', view.view_name)
,并导致是:
test_product_detail_url_resolves_product_detail_view (products.tests.ProductDetailTest) ... VIEW: products:detail
当我删除login_required所有测试都通过。
谢谢,我怀疑这种行为但我怀疑是否有一些特殊的断言功能来检查装饰的功能。使用@login_required注释功能正常工作。 – Dmitrii
不,没有内置的断言可以为您打开装饰后的功能。看起来好像在Python 3中[很好地解开装饰函数](https://www.safaribooksonline.com/library/view/python-cookbook-3rd/9781449357337/ch09s03.html)。但是改变视图/我上面建议的测试更简单。 – Alasdair