2013-02-20 10 views
9

Sto utilizzando il LiveServerTestCase di Django 1.4 per il test del selenio e sto avendo problemi con il metodo di classe setUpClass. Per quanto ne so, MembershipTests.setUpClass viene eseguito una volta prima dell'esecuzione dei test delle unità.Django LiveServerTestCase: utente creato nel metodo setUpClass non disponibile in test_method?

Ho inserito il codice per aggiungere un utente al database in MembershipTests.setUpClass ma quando eseguo il test MembershipTests.test_signup nessun utente è stato aggiunto al database di test. Cosa sto facendo in modo errato? Mi aspetto che l'utente che ho creato in setUpClass sia disponibile in tutti i test di unità.

Se metto il codice di creazione utente in MembershipTests.setUp e corro MembershipTests.test_signup posso vedere l'utente, ma non voglio che questo periodo di prova prima di ogni unità come setUp è. Come puoi vedere, utilizzo una classe LiveServerTestCase personalizzata per aggiungere funzionalità di base a tutti i miei test (test_utils.CustomLiveTestCase). Sospetto che questo abbia qualcosa a che fare con il mio problema.

Grazie in anticipo.

test_utils.py:

from selenium.webdriver.firefox.webdriver import WebDriver 
from django.test import LiveServerTestCase 

class CustomLiveTestCase(LiveServerTestCase): 

    @classmethod 
    def setUpClass(cls): 
     cls.wd = WebDriver() 
     super(CustomLiveTestCase, cls).setUpClass() 

    @classmethod 
    def tearDownClass(cls): 
     cls.wd.quit() 
     super(CustomLiveTestCase, cls).tearDownClass() 

tests.py:

from django.contrib.auth.models import User 
from django.test.utils import override_settings 
from test_utils import CustomLiveTestCase 
from test_constants import * 

@override_settings(STRIPE_SECRET_KEY='xxx', STRIPE_PUBLISHABLE_KEY='xxx') 
class MembershipTests(CustomLiveTestCase): 

    fixtures = [ 
     'account_extras/fixtures/test_socialapp_data.json', 
     'membership/fixtures/basic/plan.json', 
    ] 

    def setUp(self): 
     pass 

    @classmethod 
    def setUpClass(cls): 
     super(MembershipTests, cls).setUpClass() 
     user = User.objects.create_user(
      TEST_USER_USERNAME, 
      TEST_USER_EMAIL, 
      TEST_USER_PASSWORD 
     ) 

    def test_signup(self): 
     print "users: ", User.objects.all() 

risposta

9

Poiché si utilizza LiveServerTestCase è quasi uguale a TransactionTestCase che crea e distrugge il database (tronca le tabelle) per ogni testcase eseguito.

Quindi davvero non si possono fare dati globali con LiveServerTestCase.

+0

Qualche idea, come posso creare un utente e quindi collegarlo con LiveServerTestCase? Creazione dell'account in setUp con il database SQLite in: memoria: non funziona, anche se eseguo il commit manualmente. – dotz

12

Il database viene abbattuto e ricaricato su ogni metodo di prova, non sulla classe di test. Quindi il tuo utente sarà perso ogni volta. Fatelo in setUp non setUpClass.

+0

Grazie per la risposta. Significa che [questa risposta] (http://stackoverflow.com/a/14038336/378638) non è corretta o non la capisco male? Non è proprio possibile creare record di test in un posto per l'uso in tutti i metodi di test in una classe di test? Voglio utilizzare lo stesso record utente per tutti i metodi di test e '' setUp'' finisce per ricrearlo prima di ognuno. –

Problemi correlati