36

私はいくつかのテストを行おうとしていますが、URLResolverまだよくわかりませんが、この問題をすぐに解決したいと考えています。

では、リゾルバーに URL を追加して、それを とは別にTestCase使用および保持できるようにしたいと考えています。Client.get('/url/')urls.py

4

4 に答える 4

25

https://docs.djangoproject.com/en/2.1/topics/testing/tools/#urlconf-configuration

あなたのテストでは:

class TestMyViews(TestCase):
     urls = 'myapp.test_urls'

これは として使用myapp/test_urls.pyされますROOT_URLCONF

于 2011-11-09T09:52:19.560 に答える
7

これは少し前に尋ねられたことは知っていますが、より完全で最新のものを提供するためにもう一度答えたいと思いました.

これを解決するには 2 つのオプションがあります。1 つは、SystemParadox の回答で示唆されているように、独自の URL ファイルを提供することです。

class MyTestCase(TestCase):
    urls = 'my_app.test_urls'

もう 1 つは、URL にモンキー パッチを適用することです。これは URL のオーバーライドに対処するための推奨される方法ではありませんが、それでも必要な状況に陥る可能性があります。残りに影響を与えずに単一のテストケースに対してこれを行うには、setUp()メソッドでそれを実行してから、メソッドでクリーンアップする必要がありますtearDown()

import my_app.urls
from django.conf.urls import patterns

class MyTestCase(TestCase):
    urls = 'my_app.urls'

    def setUp(self):
        super(MyTestCase, self).setUp()
        self.original_urls = my_app.urls.urlpatterns
        my_app.urls.urlpatterns += patterns(
            '',
            (r'^my/test/url/pattern$', my_view),
        )

    def tearDown(self):
        super(MyTestCase, self).tearDown()
        my_app.urls.urlpatterns = self.original_urls

urlsclass 属性を省略した場合は動作しませんのでご注意ください。これは、他のテスト ケースと一緒にテストを実行すると、URL がキャッシュされ、モンキー パッチが有効にならないためです。

于 2013-12-05T16:12:00.953 に答える