7

ログイン ビューを作成していて、ビューの単体テストを追加したいと考えています。私の見解は次のようになります。

def login(request):

    if request.POST:
            usrname = request.POST.get('username')
            password = request.POST.get('password')
            user = authenticate(username=usrname, password=password)

            if user is not None:
                    auth_login(request, user)
                    return redirect('/core/home/')
            else:
                    context = {'error_message': "Invalid username or password"}
                    return render(request, 'core/login.html', context)
    else:
            c = {}
            c.update(csrf(request))
            return render_to_response('core/login.html',c)

def home(request):
    if request.user.is_authenticated():
        context = {'user' : request.user}
        return render(request, 'core/home.html', context)
    else:
        return render(request, 'core/login.html')

そして、私の単体テストは次のようになります。

class CoreViewTests(TestCase):
    def setUp(self):
            self.factory = RequestFactory()

    def test_login_view_with_valid_user(self):
            uf = UserFactory()
            user = uf.make_user("ValidUser1", "12345", "user@abc.com")
            self.assertEqual(user.username, "ValidUser1")
            request = self.factory.post('/core/login', {"username": "ValidUser1", "password": "12345"})
            response = login(request)
            self.assertEqual(response.status_code, 200)

セッション オブジェクトが見つからないため、単体テストがクラッシュします。ダミーのセッション ディクショナリを定義して、Web サイトのカップル チュートリアルに従いますが、役に立ちません。

セッションオブジェクトを処理する必要があるビューの単体テストを作成する方法を誰かに教えてもらえますか?

ありがとう。

4

2 に答える 2

9

RequestFactoryオブジェクトのドキュメントから:

ミドルウェアはサポートしていません。ビューが正しく機能するために必要な場合は、セッション属性と認証属性をテスト自体で指定する必要があります。

request.sessionあなたが言うように、あなたはそれに適切なものを含む辞書になるように手動で設定することを試みることができます。ただし、昔ながらのDjangoテストクライアントを使用する方が簡単な場合があります。

于 2013-02-05T19:50:07.830 に答える
1

このような: request.session = {'num_visits': 0}

于 2020-03-19T06:32:00.750 に答える