2013-07-02 16 views
5

Absolutnie gubię mój mózg nad tym. Nie rozumiem, dlaczego tak się dzieje. Za każdym razem, gdy uruchomię ten test, obiekt zostanie zapisany w normalnej, nie testowanej bazie danych. Jednak oba twierdzenia na końcu testu i tak kończą się niepowodzeniem, mówiąc, że nie mogą znaleźć DOWOLNYCH użytkowników w bazie danych, mimo że za każdym razem, gdy test jest uruchamiany, muszę przejść do administratora, aby usunąć obiekty, które utworzył na localhost. Używam SQLITE3 w moich ustawieniach i rozumiem, że testy SQLITE mają być uruchamiane w pamięci, a nie uderzanie w bazę danych. Szukałem i szukałem i nie mogę znaleźć żadnych przydatnych informacji w Internecie. Oto funkcja testu:Django funkcjonalny LiveServerTestCase - Po przesłaniu formularza z selenem, obiekty zapisują do nietestownej bazy danych

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() 

Jeśli istnieje inny kontekst, który mogę przedstawić, z przyjemnością pokażę. Jest to praktycznie pusty projekt, więc w settings.py nie ma żadnych dziwnych lub nietypowych ustawień, które mogłyby wprowadzać w błąd. Każda pomoc będzie bardzo ceniona.

+0

Nigdy nie używaj SQLLite 3 jako poligonu badawczego. To straszne na wszystkich 58 odcinkach do niedzieli. –

+0

@limelights Właśnie zainstalowałem i ustawiłem postgres na moim komputerze i otrzymałem ten sam błąd. Naprawdę denerwuję się teraz. –

+0

Jakiego polecenia używasz do uruchamiania testów? – Alasdair

Odpowiedz

12

Zgodnie z the LiveServerTestCase docs, serwer na żywo jest domyślnie na porcie 8081. Jednak zamiast tego pobierasz stronę z portu 8000.

Oczekuję, że uruchomiłeś serwer dev na porcie 8000 i twoje testy się z nim łączą, więc twoje nowe obiekty pojawią się w nietestownej bazie danych. Musisz zmienić kod, aby pobrać stronę z portu 8081.

+0

Jestem w pracy i to jest osobisty projekt, więc nie mogę tego przetestować w tej chwili, ale brzmi to tak, jakby to była właśnie kwestia tutaj. Wrócę i sprawdzę twoją odpowiedź tak szybko, jak to możliwe. Dzięki. –

+0

Mogę szczerze cię pocałować. Kusi mnie, abym zaczął podążać za każdym twoim krokiem na SO, aby móc przetestować każdy twój post. Pokazuje tylko, że prawdopodobnie powinienem przeczytać dokumentację przed wykonaniem jakiegokolwiek innego debugowania. Wielkie dzięki. –

0

Quick Update:

Jak Django 1.11, konfiguracja serwera przez LiveServerTestCase wykorzystuje żadnego wolny port przypisany przez localhost, a nie po prostu 8081.

Możesz przejść na żywo URL serwera oraz port za pomocą self.live_server_url, jak na docs

Powiązane problemy