Attualmente sto cercando di scrivere alcuni test unitari per l'applicazione Flask. In molte delle mie funzioni di visualizzazione (come il mio login), reindirizzo a una nuova pagina. Quindi, ad esempio:Test reindirizzamento nel pallone con Python Unittest
@user.route('/login', methods=['GET', 'POST'])
def login():
....
return redirect(url_for('splash.dashboard'))
Sto provando a verificare che questo reindirizzamento avvenga nei miei test di unità. In questo momento, ho:
def test_register(self):
rv = self.create_user('John','Smith','[email protected]', 'helloworld')
self.assertEquals(rv.status, "200 OK")
# self.assert_redirects(rv, url_for('splash.dashboard'))
Questa funzione assicurarsi che la risposta restituita è di 200, ma l'ultima riga non è ovviamente sintassi valida. Come posso affermarlo? La mia funzione è semplicemente create_user
:
def create_user(self, firstname, lastname, email, password):
return self.app.post('/user/register', data=dict(
firstname=firstname,
lastname=lastname,
email=email,
password=password
), follow_redirects=True)
Grazie!
Incoraggio fortemente le persone a utilizzare questa soluzione, che rimuove la dipendenza da Flask-Testing (in generale, penso che l'uso delle poche estensioni possibili sia una buona cosa, o solo le "stabili" e "grandi", come Flask -Principal, Flask-Security, ecc.). Tuttavia, questa soluzione solleva un 'RuntimeError: Tentativo di generare un URL senza che venga premuto il contesto dell'applicazione. Questo deve essere eseguito quando il contesto dell'applicazione è disponibile', perché 'url_for' ha bisogno del contesto dell'applicazione. Tutto quello che devi fare è metterlo in un 'con app.app_context():' – Edouardb