Ho iniziato a utilizzare un processore di contesto personalizzato per passare un oggetto a ogni risposta. L'unico problema con questo è che i miei test ora falliscono perché non riescono a trovare questo oggetto nel database. Ho provato a creare un test con Request Factory, poiché comprendevo che questo isolava i test di Django come il middleware, ecc. Suppongo che i processori di contesto siano ancora in esecuzione. C'è un modo per superare questo? Dovrò passare questo oggetto ad ogni test? Se c'è un modo per evitarlo, preferirei farlo.Processori contesto personalizzati, unit test e factory richiesta
risposta
Dopo ulteriori indagini, ritengo che la soluzione migliore sia quella di sovrascrivere la tupla context_processors durante ciascun test. Questo è stato possibile dal 1.4. Sembra meglio che inviare l'oggetto richiesto ad ogni test. Mi piacerebbe indagare se posso scrivere un decoratore personalizzato per questo, ma non ne so ancora abbastanza su di loro. Riferimento: https://docs.djangoproject.com/en/dev/topics/testing/overview/#overriding-settings
edit: Un'altra implementazione di questa soluzione qui delineato: How to Unit test with different settings in Django? probabilmente meglio in quanto può essere fatto per un intero tests.py
EDIT2: avendo scoperto che decoratori sono in realtà costrutti Python (presume fossero personalizzato funzionalità django! massiccia newbie a python, a proposito, ho imparato il django prima di imparare qualsiasi python), penso che un decoratore personalizzato sia il modo in cui andrò con questo.
edit3: Penso che in realtà una soluzione più semplice sarebbe avere un file test.py nel mio modulo delle impostazioni e sovrascrivere il mio modulo context_processor delle impostazioni di base con quello delle impostazioni di test nei test. Ad es .:
from settings import localsettings
from settings import testsetttings
localtestsettings.context_processors = testsettings.context_processors
tests(unittest):.....
Qualsiasi altro suggerimento è più che benvenuto.
edit4: Ok. Mi sento stupido ora. Ovviamente la soluzione che ho finito per usare è creare un file di impostazioni di test e passarlo al comando di test.
Utilizzare questo su tests.py ha funzionato bene con me
from django.test import TestCase, Client, override_settings
@override_settings (
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
)
class HomeViewTestCase(TestCase):
...
- 1. Unit test AngularJS factory che hanno dipendenze
- 2. Setup Factory Girl with Test :: Unit and Shoulda
- 3. Messagebox e Unit test
- 4. EntityFunctions.TruncateTime e unit test
- 5. Unit test e nibernate?
- 6. unit test e test funzionali in CodeIgniter
- 7. Python - Twisted e Unit Test
- 8. AFNetworking 2.0 e Unit Test
- 9. Unit test a HttpApplication
- 10. Processori di contesto vs middleware in django
- 11. Cucumber e Rspec condividono factory factory
- 12. unit test system.timers.timer
- 13. unit test direttiva angularjs
- 14. unit test smell
- 15. Unit test Scala
- 16. Unit test IHttpModule
- 17. Unit test codice matematico
- 18. Unit test Direttive AngularJS
- 19. Unit test event javascript
- 20. Unit test localized stringhe
- 21. unit test utilizzando dattiloscritto e karma
- 22. Qt, unit test e oggetti finti
- 23. Unit test Winforms UI
- 24. Unit test the Viewmodel
- 25. ZF2 autenticazione unit test
- 26. unit test in C++
- 27. Unit test chiamata Activity.startService()?
- 28. Esecuzione Qt unit test
- 29. unit test modular javascript
- 30. Test Unit multithreading