2013-07-02 9 views
5

Assolutamente perdere la testa per questo. Non riesco a capire perché questo sta accadendo. Ogni volta che eseguo questo test, l'oggetto viene salvato nel normale database non di test. Tuttavia, entrambe le asserzioni alla fine del test falliscono comunque, dicendo che non riescono a trovare QUALSIASI utente nel database, anche se ogni volta che si esegue il test devo andare nell'amministratore per cancellare gli oggetti che è stato creato su localhost. Sto usando SQLITE3 nelle mie impostazioni, e capisco che i test SQLITE dovrebbero funzionare in memoria, piuttosto che colpire il database. Ho cercato e cercato e non riesco a trovare alcuna informazione utile sul web. Ecco la funzione di test:Django funzionale LiveServerTestCase - Dopo aver inviato il modulo con selenio, gli oggetti salvano nel database non di prova

import time 
import datetime 

from django.test import TestCase, LiveServerTestCase 
from django.core.urlresolvers import resolve 
from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
from django.contrib.auth.models import User 

from apps.registration.forms import RegistrationForm 

class NewVisitorTest(LiveServerTestCase): 

    def setUp(self): 
     self.browser = webdriver.Firefox() 
     self.browser.implicitly_wait(3) 

    def tearDown(self): 
     self.browser.quit() 

    def test_registration_process(self): 

     # Goes to registration page 

     self.browser.get('http://localhost:8000/register/') 

     # User can find sign up form 
     registration_form = self.browser.find_element_by_id('id_registration_form') 

     # User can fill out sign up form 
     first_name_input = self.browser.find_element_by_id('id_first_name') 
     first_name_input.send_keys('Jim') 

     last_name_input = self.browser.find_element_by_id('id_last_name') 
     last_name_input.send_keys('Barrow') 

     date = datetime.date.today() 
     date_input = self.browser.find_element_by_id('id_birthday') 
     date_input.send_keys(str(date)) 

     username_input = self.browser.find_element_by_id('id_username') 
     username_input.send_keys('jim_barrow') 

     password_input = self.browser.find_element_by_id('id_password') 
     password_input.send_keys('kittensarecute') 

     password_1_input = self.browser.find_element_by_id('id_password1') 
     password_1_input.send_keys('kittensarecute') 

     email_input = self.browser.find_element_by_id('id_email') 
     email_input.send_keys('[email protected]') 

     # User can submit sign up form 
     registration_form.submit() 

     # User is now registered as a user object 
     users = User.objects.all() 
     self.assertEqual(len(users), 1) 

     # User is now registered as a person object 
     persons = Person.objects.all() 
     self.assertEqual(len(persons), 1) 

if __name__ == '__main__': 
    unittest.main() 

Se c'è un altro contesto che posso fornire, ti mostrerò felicemente. Questo è praticamente un progetto vuoto, quindi non ci sono impostazioni strane o insolite in settings.py che potrebbero confondere le cose. Qualsiasi aiuto sarebbe molto apprezzato.

+0

Non utilizzare mai SQLLite 3 come terreno di prova. È orribile in tutti i 58 modi fino alla domenica. –

+0

@limelights Appena installato e installato postgres sulla mia macchina e ottenere lo stesso errore. Mi sto davvero frustrando con questo ora. –

+0

Quale comando stai usando per eseguire i test? – Alasdair

risposta

12

In base allo the LiveServerTestCase docs, il server live si trova sulla porta 8081 per impostazione predefinita. Tuttavia stai recuperando la pagina dalla porta 8000.

Mi aspetto che si stia eseguendo il server di sviluppo sulla porta 8000 e che i test si siano connessi ad esso, quindi i nuovi oggetti vengono visualizzati nel database non di test. È necessario modificare il codice per recuperare la pagina dalla porta 8081.

+0

Sono al lavoro e questo è un progetto personale, quindi non posso testarlo al momento, ma sembra che potrebbe essere il problema qui. Tornerò e controllerò la tua risposta nel modo più corretto possibile. Grazie. –

+0

Potrei sinceramente baciarti. Sono tentato di iniziare a seguire ogni tua mossa su SO solo per poter sopravvivere ogni tuo post. Mostra solo che probabilmente dovrei leggere la documentazione prima di fare qualsiasi altro debug. Grazie mille. –

0

Aggiornamento rapide:

Come di Django 1.11, la configurazione del server da LiveServerTestCase utilizza qualsiasi porta libera assegnata dal localhost, non semplicemente 8081.

è possibile accedere al URL del server dal vivo e porta utilizzando self.live_server_url, come da docs

Problemi correlati