2

いくつかの環境変数に依存するDjangoアプリのテストを書き始めています。シェルでテストしているときは、OSをインポートして変数を指定でき、テストは問題なく機能します。ただし、それらをtests.pyに配置すると、これらの変数が見つからないため、キーエラーが発生します。これが私のテストの様子です:

from django.utils import unittest
from django.test.utils import setup_test_environment
from django.test.client import Client
import os

os.environ['a'] = 'a'
os.environ['b'] = 'b'


class ViewTests(unittest.TestCase):
    def setUp(self):
        setup_test_environment()

    def test_login_returning_right_template(self):
        """ get / should return login.html template """
        c = Client()
        resp = c.get('/')
        self.assertEqual(resp.templates[0].name, 'login.html')

これは、これらの変数を初期化するのに間違った場所ですか?setUpで実行しようとしましたが、同じ結果になりました。それらは見つかりませんでした。テストスイートを実行する前に環境変数を初期化する方法に関する提案はありますか?ありがとう!ルカ

4

1 に答える 1

5

ビューでos.enviorを中継しないでください。必要な場合は、settings.pyで実行してください

MY_CUSTOM_SETTING = os.environ.get('a', 'default_value')

また、ビューでは設定変数を使用します。

from django.conf.settings import MY_CUSTOM_SETTING
print MY_CUSTOM_SETTING

次に、テストで次の設定を行うことができます。

from django.test import TestCase

class MyTestCase(TestCase):

    def test_something(self):
        with self.settings(MY_CUSTOM_SETTING='a'):
            c = Client()
            resp = c.get('/')
            self.assertEqual(resp.templates[0].name, 'login.html')
于 2012-06-08T14:30:02.293 に答える