GET値に基づいてフォームフィールドの初期値を設定する必要があるビューがあります。これをテストしたい。私は現在Djangoのテストクライアントを使用していますが、他のツールを検討することもできます。
編集
申し訳ありませんが、assertContainsinput
メソッドをよく知っているとは言いませんでしたが、HTMLでタグとvalue
属性を検索する以外のより良い方法があることを望んでいました。
GET値に基づいてフォームフィールドの初期値を設定する必要があるビューがあります。これをテストしたい。私は現在Djangoのテストクライアントを使用していますが、他のツールを検討することもできます。
申し訳ありませんが、assertContainsinput
メソッドをよく知っているとは言いませんでしたが、HTMLでタグとvalue
属性を検索する以外のより良い方法があることを望んでいました。
私自身の質問に答えるのが嫌いですが(3回目のように)、テストクライアントをいじった後、より良い方法を見つけました:
def test_creating_stop(self):
c = self.client
# Check that name is pre-filled
response = c.get('%s?name=abcd' % reverse('add_new_stop'))
self.assertEqual(response.context['form'].initial['name'], 'abcd')
誰かがこれに何か問題があると思いますか? しばらく置いておきますので、他の方の意見を参考にしてください。
受け入れられたソリューションinitial['...']
はフォームの値を確認しますが、フィールドの実際の値を確認することもできます。以下の疑似コード。
これは、モデルから直接取得したデフォルト値 (form.initial が設定されていない) をテストし、それinitial['...']
が実際の値であることを確認する場合に役立ちます。
def test_some_default_value(self):
response = self.client.get('/signup/')
self.assertEquals(response.context['form']['plan'].value(), my_value)
def test_some_default_value_2(self):
some_different_conditions...
response = self.client.get('/signup/')
self.assertEquals(response.context['form']['plan'].value(), a_different_value)
値は <input value= 'whatever'/> として html に埋め込まれます。その文字列は、お好みのツールで検索できます。
response = Client().get('/customer/details/')
print [line for line in response.split('\n') if line.find('<input') > -1]
この機能は 1.3 に付属していると思いますが、以前に付属していた可能性があります。要件に合わせてページの例を少し変更しましたが、これはテストされていないコードであり、応答コンテキストのフォーム パラメーターなどを想定しています。必要に応じて変更します。この回答のポイントは、リクエスト ファクトリを表示することです。
http://docs.djangoproject.com/en/dev/topics/testing/#django.test.client.RequestFactory
from django.utils import unittest
from django.test.client import RequestFactory
class SimpleTest(unittest.TestCase):
def setUp(self):
# Every test needs access to the request factory.
self.factory = RequestFactory()
def test_details(self):
get_param = 'some_value'
# Create an instance of a GET request.
request = self.factory.get('/customer/details/?param={0}'.format(get_param))
# Test my_view() as if it were deployed at /customer/details
response = my_view(request)
# test 1
form = response.form
idx = form.as_p().find(get_param)
self.assertNotEqual(idx, -1)
#or.. test 2
self.assertContains(response, get_param)