Djangoでテストするのに問題があります。私はof the responsesというドキュメントを読んできましたが、ドキュメントで説明しているのと同じことはできません。間違った動作Djangoのテストをしています
私は応答を取得すると、私は唯一のresponse.status_code
へのアクセス権を持っていると私はresponse.(and now PyCharm shows all available options)
を書くときcontext
またはredirect_chain
にアクセスすることはできません。
私はsettings.py
をチェックしました。私は'BACKEND': 'django.template.backends.django.DjangoTemplates'
を使って、私がDjangoテンプレートを使用していることを確認しました。なぜ、テストがうまくいかないのかわかりません。私は何か設定する必要がありますか?
私はそれをやろうとしているテストのコードは次のとおりです。
from django.test import TestCase
from django.test.client import Client
class Test(TestCase):
def testLogin(self):
client = Client()
headers = {'X-OpenAM-Username': 'user', 'X-OpenAM-Password': 'password', 'Content-Type': 'application/json'}
data = {}
response = self.client.post('/login/', headers=headers, data=data, secure=True, follow=True)
assert (response.status_code == 200)
# self.assertRedirects(response, '/menu/', status_code=301, target_status_code=200)
私はDjangoの認証を使用していないが、ログインフォームがIDPにデータを送信し、IDPは、正しい答えを送信した場合、「ログイン」それは成功だ:
def login(request):
logout(request)
message = None
if request.method == "POST":
form = LoginForm(request.POST)
if form.is_valid():
username = request.POST['username']
password = request.POST['password']
headers = {'X-OpenAM-Username': username, 'X-OpenAM-Password': password, 'Content-Type': 'application/json'}
data = {}
req = requests.post('http://openam.idp.com:8090/openamIDP/json/authenticate', headers=headers, params=data)
if req.status_code == 200:
respJson = json.loads(req.content)
tokenIdJson = respJson['tokenId']
request.session['tokenId'] = tokenIdJson
return render_to_response('menu/menu.html', request)
elif req.status_code == 401:
message = "Invalid username and/or password. Please, try again"
else:
form = LoginForm()
return render_to_response('registration/login.html', {'message': message, 'form': form},
context_instance=RequestContext(request))
リダイレクトは、私は、デバッグを行うとき、私は空のredirect_chain
を参照し、今では失敗したので、それはコメントしています主張しています。 Webをすべて動かすと、すべてのビューが期待どおりにリダイレクトされるため、なぜこのようなことが起こるのか理解できません。
なぜ私はstatus_code
のみチェックできますか?正常にログインした後にリダイレクトすると、通常の使用では動作しますが、テストでは何も間違っていますか?
ありがとうございました。
こんにちは、あなたの答えのためではなく、後のおかげで、私はまだ空「redirect_chain」を取得していPOSTデータとして資格情報を渡すと、 "AssertionError:応答が期待どおりにリダイレクトされませんでした:レスポンスコードが200(予想された301)" – Aker666
@ Aker666もっと見ると、あなたはリダイレクトさえ使用していません。フォームが有効で、ユーザーが正常に認証されたとしても、['redirect'](https://docs.djangoproject.com/ja/1.10/topics/http/shortcuts)ではなく、' render_to_response'を使って応答を返します。 /#リダイレクト)、または直接 'HttpResponseRedirect'を返します。 – knbk
ああ、私はジャンゴを学んでいて、気付かなかった。今、それは動作します、ありがとう! – Aker666