1

Django アプリケーションのテスト ケースを作成していますが、Python で requests パッケージを使用してステータス コードにアクセスし、assert ステートメントを使用しています。このテスト ケースは、スタッフ ユーザーのみを対象としています。

class StaffClientServerTestCase(TestCase):

    def test_login_staff(self):
        User.objects.create_superuser('abc', 'abc@gmail.com', '1234')
        self.client.login(username='abc', password='1234')
        self.client.get('/dashboard/')
        s = requests.get('http://localhost:8000/dashboard/')
        print s.status_code
        self.assertEqual(200, s.status_code)

ダッシュボードにアクセスできるのはスタッフ ユーザーだけなので、スタッフ ユーザー オブジェクトを作成しました。次の行

self.client.login(username='abc', password='1234')が現実になりつつあります。 self.client.get('/dashboard/')この行を印刷すると、ページの html コンテンツが表示されます。これは、スタッフ ユーザーが にアクセスできることを意味しますdashboard

しかし、リクエストモジュールを使用してdashboardurl のステータスコードを確認すると、それが表示されstatus code = 500、テストが失敗しています。

s = requests.get('http://localhost:8000/dashboard/') print s.status_code

ここでどこが間違っているのか誰か教えてもらえますか? スタッフユーザーがダッシュボードにアクセスしてその内容をprint self.client.get('/dashboard/'). ヘルプ!

4

1 に答える 1

1

他の方法でケースをテストできます。

ビューをデコレータで保護します。

@user_passes_test(lambda u: u.is_staff)
def dashboard(request, ...):
    # ...

requests次に、ページの表示が禁止されているかどうかを確認するようリクエストします。禁止されている場合 (403 禁止)、ビューは正しく機能しています。ビューがスタッフ ユーザーに対して正しく機能するかどうかを確認するには、デコレータを削除して再度リクエストします。この時点で問題がなければ、すべて問題ありません。テストするのは、ビュー内のロジックだけです。

しかし、現在、403 ではなく 500 を取得しています。これは、バックエンド エラーがあることを意味します。最初にそれらを修正します

于 2015-11-07T18:41:27.420 に答える