2015-12-23 39 views
1

我正在嘗試爲示例Flask應用程序編寫一些單元測試,因爲我是Flask的新手。我試圖測試登錄功能是否正常工作。我的相關單元測試代碼如下所示:Flask app.post failure

def login(self, name, password): 
    return self.app.post('/', data={ 
     'password': password, 'name': name}, 
     follow_redirects=True) 

def test_users_cannot_login_unless_registered(self): 
    response = self.login('foo', 'bar') 
    self.assertIn(b'Invalid username or password.', response.data) 

當我手動測試的應用程序,我得到「無效的用戶名或密碼」的錯誤消息。然而,當我運行單元測試,我得到的失敗:

Traceback (most recent call last): 
    File "tests.py", line 55, in test_users_cannot_login_unless_registered 
self.assertIn(b'Invalid username or password.', response.data) 
AssertionError: 'Invalid username or password.' not found in '<!DOCTYPE html>\n<html>\n<head>\n\t<title>Welcome to FlaskTaskr!</title>\n\t<link rel="stylesheet" href="/static/css/main.css">\n\t</head>\n\t<body>\n\t\t<div class="page">\n\n\t\t\t\n\n\t\t\t\n\t\t\t<div class="error"><strong>ERROR:</strong> Both fields are required.</div>\n\t\t\t\n\n\t\t\t<br>\n\n\t\t\t\n\n<h1>Welcome to FlaskTaskr.</h1>\n<div class="lead">Please sign in to access your task list.</div>\n<form class="form-signin" role="form" method="post" action="/">\n\t<input id="csrf_token" name="csrf_token" type="hidden" value="1450903611##20d216a4c9ad935bc78678f060bfd898a7ead69f">\n\t<p>\n\t\t<input id="name" name="name" placeholder="name" type="text" value="foofoo">\n\t\t<span class="error">\n\t\t\t\n\t\t</span>\n\t</p>\n\t<p>\n\t\t<input id="password" name="password" placeholder="password" type="password" value="">\n\t\t<span class="error">\n\t\t\t\n\t\t</span>\n\t</p>\n\t<button class="btn btn-sm btn-success" type="submit">Sign in</button>\n\t<br>\n\t<br>\n\t<p><em>Need an account? </em><a href="/register">Sign up!</a></p>\n</form>\n\n\n\n\t\t</div>\n\t</body>\n\t</html>' 

「這兩個領域都需要」文本的存在,似乎表明我的密碼不被傳遞給應用程序。下面是我使用的生成頁面的HTML/Jinja2的代碼:

{% extends "_base.html" %} 
{% block content %} 

<h1>Welcome to FlaskTaskr.</h1> 
<div class="lead">Please sign in to access your task list.</div> 
<form class="form-signin" role="form" method="post" action="/"> 
    {{ form.csrf_token }} 
    <p> 
    {{ form.name(placeholder="name") }} 
    <span class="error"> 
     {% if form.name.errors %} 
     {% for error in form.name.errors %} 
     {{ error }} 
     {% endfor %} 
     {% endif %} 
    </span> 
    </p> 
    <p> 
    {{ form.password(placeholder="password") }} 
    <span class="error"> 
     {% if form.password.errors %} 
     {% for error in form.password.errors %} 
     {{ error }} 
     {% endfor %} 
     {% endif %} 
    </span> 
    </p> 
    <button class="btn btn-sm btn-success" type="submit">Sign in</button> 
    <br> 
    <br> 
    <p><em>Need an account? </em><a href="/register">Sign up!</a></p> 
</form> 
{% endblock %} 

什麼的問題可能還是到哪裏尋找這個問題的任何想法?

謝謝!

+0

我沒有太多想法,但是您需要在測試中將csrf令牌與請求一起傳遞嗎? – mgilson

+0

你是對的! –

回答