8

Django アプリケーションに単体テストを導入したいと考えていました。最初にテストしたいことで失敗し始めましたが。私が間違っていることを教えてもらえますか?

テストしたいビュー

@user_passes_test(lambda u: u.has_module_perms('myModule'))
def myView(request):
    ...someCode...

user_passes_test ビットをテストしたかったのですが、より複雑なテストも行っているため、テストで適切なユーザーのみがビューにアクセスできるかどうかを知りたいと考えていました。うまくいかなかった部分に焦点を当てて、少し単純化しました。

from django.contrib.auth.models import User
from django.test import TestCase
from settings import DJANGO_ROOT

class PermissionsTestCase(TestCase):
    fixtures = [DJANGO_ROOT + 'testdata.json']

    def setUp(self):
        self.user = User.objects.create(username='user', password='pass')
        self.user.save()

    def test_permissions_overview(self):
        url = '/secret/'

        #User not logged in (guest)
        response = self.client.get(url)
        self.assertRedirects(response, 'http://testserver/accounts/login/?next=/secret/')

        #Logged in user that should not be able to see this page
        response = self.client.get(url)
        self.client.login(username='user', password='pass')
        self.assertRedirects(response, 'http://testserver/accounts/login/?next=/secret/')

        #Logged in user that has 'myModule' module permissions 
        self.user.user_permissions.add('myModule.view_myThing')
        self.user.save()
        self.assertTrue(self.user.has_module_perms('myModule')) #This one fails
        self.client.login(username='user',password='pass')
        response = self.client.get(url)
        self.assertContains(response,  "What to look for") #This one too

そして、最後のビットは失敗し続けます。許可が通りません。何か案は?

4

2 に答える 2

-3

権限は文字列です。

# this tests to see if a user has 'myModule'
@user_passes_test(lambda u: u.has_module_perms('myModule'))

#gives the user a completely different permission called 'myModule.view_myThing'
self.user.user_permissions.add('myModule.view_myThing')

#tests to see if user has a permission called 'myModule' which is not 'myModule.view_myThing'
self.assertTrue(self.user.has_module_perms('myModule'))

あなたが書いたことに基づいてあなたの意図を推測することはできませんが、追加/チェックしようとしている少なくとも2つの異なる権限があります. ユーザーに与える権限を次のように変更します: self.user.user_permissions.add('myModule')

于 2013-02-02T21:14:05.900 に答える