我想將單元測試引入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
而最後一位仍然失敗。權限沒有通過。有任何想法嗎?
'self.user.user_permissions.add('myModule.view_myThing')'不能工作。關於爲什麼它不能工作的答案可以在這裏找到:[向Django用戶對象添加用戶權限時發生無效的文字錯誤](http://stackoverflow.com/questions/10131271/invalid-literal-error-when-adding -a-user-permission-to-a-django-user-object) – Louis
你必須在user_permissions.add()方法內傳遞一個Permission對象。你不能只傳遞一個字符串。 – user208859