5

以前にビューのテストをいくつか作成しました。そのように

class TestUserRegistrationViewUserCreate(APITestCase):
def setUp(self):
    self.factory = APIRequestFactory()

def test_create_user(self):
    data = {
        'phone_number': '+79513332211',
        'password': 'qwerty'
    }
    request = self.factory.post(reverse('user'), data=data)
    response = CustomUserAPIView.as_view()(request)
    self.assertEqual(response.status_code, status.HTTP_201_CREATED)

API のバージョン管理を追加するように依頼されるまで、すべてがうまく機能していました。

DRF はネイティブでバージョン管理をサポートしていますhttp://www.django-rest-framework.org/api-guide/versioning/ ので、私はそれを使用して、名前空間ベースのバージョン管理を API に追加しました

REST_FRAMEWORK = {
    'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.NamespaceVersioning'
}

ここで、バージョニングをサポートするために、ビューの単体テストを書き直す必要があります。

この問題は、 を介してバージョン管理された URL を取得するためにreverse、使用する必要があることです。

from rest_framework.reverse import reverse

reverse('bookings-list', request=request)

ドキュメントのように。

requestしかし、私は自分でオブジェクトを作成していて、それを作成するために必要なバージョン管理された URL であるため、テストにはオブジェクトがありません。

私は何をすべきか?

PS DRF を使用せずにバージョン管理を実装し、ビュー デコレータといくつかのユーティリティ関数を使用してこの問題を解決できますが、車輪を再発明しているので気分が悪くなります。また、いくつかのエッジケースも忘れる可能性があります。

4

2 に答える 2

0

reverse('<VERSION>:<VIEW_NAME>')テストケースで使用します。

于 2016-10-31T10:46:48.137 に答える
0

かなり遅いですが、同様の問題がある場合は、ビューを呼び出すときにバージョンを渡すことができます-

response = CustomUserAPIView.as_view()(request, version='1.0')
于 2019-06-20T12:04:29.747 に答える