Questo sito utilizza cookie per le proprie funzionalità e per inviarti pubblicità e servizi in linea con le tue preferenze. Chiudendo questo banner, scorrendo questa pagina o cliccando qualunque suo elemento acconsenti all’uso dei cookie.

Accedendo al link http://www.odoo-italia.org/index.php/home/cookie-policy puoi leggere in dettaglio le modalità di trattamento dei cookie da parte dell'Associazione Odoo Italia.

Benvenuto, Ospite
Nome utente: Password: Ricordami
  • Pagina:
  • 1
  • 2

ARGOMENTO: TEST Unit su OnChange: errore o bug ??

TEST Unit su OnChange: errore o bug ?? 2 Anni 2 Mesi fa #26420

  • Lotta
  • Avatar di Lotta
  • Online
  • Platinum Boarder
  • Messaggi: 450
  • Ringraziamenti ricevuti 14
  • Karma: 3
Ho un problema con una test unit su un metodo onchange.
In sintesi il metodo onchange funziona nell'uso normale, ma durante il test le query eseguite per i controlli sono vuote...

IL CODICE
Un metodo onchange, verifica che il valore immesso in un campo (codicefiscale) non sia già presente nel database. Per farlo esegue una una normale query self.search(…..)
Attenzione: Spoiler! [Clicca per espandere]


Nella unità di test (TransientCase) creo un primo record con un certo codice fiscale, e cerco poi di crearne un secondo invocando onchange, aspettandomi un messaggio di warning.
Attenzione: Spoiler! [Clicca per espandere]



PROBLEMA
la query di onchange durante il test restituisce un recordset vuoto (??), alias non trova il codicefiscale appena inserito nello stesso metodo di test (TransactionCase)

DEBUG
debuggando le varie chiamate, mi sono accorto che nel modulo test:
  • il primo record viene creato correttamente
  • i parametri values vengono correttamente e tutti ricevuti dal metodo onchange
  • dentro onchange_fiscalcode la query same_fiscalcode_partners = self.env[ 'res.partner'].search([..... è vuota
  • Ho provato anche a "forzare" la query nel onchange da self.search() a self.env[ 'res.partner' ].search([, ma la query restituisce sempre un recordset vuoto....

DOMANDA
Sto facendo degli errori di logica o è un bug ?
Il TransactionCase non dovrebbe garantire che il record creato nel metodo di test (con il codicefiscale cercato) sia presente nel DB, e cancellato solo DOPO il termine del metodo ?
Come posso fare per invocare onchange non su un record nuovo (dizionario di valori passati) , ma su un record esistente ?
Ultima modifica: 2 Anni 2 Mesi fa da Lotta.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

TEST Unit su OnChange: errore o bug ?? 2 Anni 2 Mesi fa #26421

  • eLBati
  • Avatar di eLBati
  • Online
  • Platinum Boarder
  • Messaggi: 1766
  • Ringraziamenti ricevuti 186
  • Karma: 38
Lotta ha scritto:
PROBLEMA
la query di onchange durante il test restituisce un recordset vuoto (??), alias non trova il codicefiscale appena inserito nello stesso metodo di test (TransactionCase)

Proprio nello stesso metodo, o solamente nella stessa classe?
Lorenzo Battistini
github.com/eLBati

TAKOBI
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

TEST Unit su OnChange: errore o bug ?? 2 Anni 2 Mesi fa #26422

  • Lotta
  • Avatar di Lotta
  • Online
  • Platinum Boarder
  • Messaggi: 450
  • Ringraziamenti ricevuti 14
  • Karma: 3
Ciao Lorenzo,
seguo la documentazione di Odoo Development Cookbook :
The module openerp.test.common defines several classes that can be used as base
classes for test cases:
ff TransactionCase: Each test method is run independently and the database
transaction is rolled back after each. This means that any changes made in one test
method are not seen by the other test methods. You can use the traditional setUp()
and tearDown() methods to perform test initialization and cleanup.
ff
SingleTransactionCase: All the tests methods are run in the same transaction,
which is only rolled back after the last method. If you need to perform initialization
and cleanup for the test case, you need to extend the setUpClass() and
tearDownClass() methods. Don't forget to decorate these with @classmethod, or
you will get strange errors when calling the super() implementation.

ff SavePointCase: It is an extension of SingleTransactionCase that creates
a database SAVEPOINT before running test methods and restoring them after
the test is run. The net effect is that you can run your tests in isolation as with
TransactionCase without having to pay the price of a costly setUp() method
recreating all the data between all tests—the initialization is performed in
setUpClass() and we roll back the transaction to the saved state after each test.

Un po' la stessa documentazione trovata su:
odoo-development.readthedocs.io/en/latest/dev/tests/python.html


DA quanto risulta, il TransactionCase rimuove il record a metodo finito;
durante l'esecuzione del metodo i dati nel DB sono preservati (da quanto capisco)

L'alternativa sarebbe il SingleTransactionCase, che mantiene i record fino alla uscita dalla CLASSE.


Tu quale modello utilizzi ?
Hai avuto problemi del genere ?

La query mi viene empty , ma i parametri passati sono tutti ricevuti correttamente (allego screenshot)
drive.google.com/open?id=0B47WYSOcCkIcU2VXekZsNUJ6U3M
Ultima modifica: 2 Anni 2 Mesi fa da Lotta.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

TEST Unit su OnChange: errore o bug ?? 2 Anni 2 Mesi fa #26426

  • eLBati
  • Avatar di eLBati
  • Online
  • Platinum Boarder
  • Messaggi: 1766
  • Ringraziamenti ricevuti 186
  • Karma: 38
Lotta ha scritto:

DA quanto risulta, il TransactionCase rimuove il record a metodo finito;
durante l'esecuzione del metodo i dati nel DB sono preservati (da quanto capisco)

L'alternativa sarebbe il SingleTransactionCase, che mantiene i record fino alla uscita dalla CLASSE.


Tu quale modello utilizzi ?
Hai avuto problemi del genere ?

Dipende dai casi, ma comunque la tua interpretazione è corretta.

Nel tuo caso specifico, hai caricato il codice completo da qualche parte, così da controllare?
Lorenzo Battistini
github.com/eLBati

TAKOBI
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

TEST Unit su OnChange: errore o bug ?? 2 Anni 2 Mesi fa #26427

  • Lotta
  • Avatar di Lotta
  • Online
  • Platinum Boarder
  • Messaggi: 450
  • Ringraziamenti ricevuti 14
  • Karma: 3
Grazie Lorenzo,
ho caricato su github adesso
github.com/Giuliano69/l10n-italy/tree/fc-01

Chiaramente il modulo fallisce il test su travis, in quanto la assertion non viene verificata dal test....

--- ADDENDUM
ho modificato la classe con derivandola da SingleTransactionCase per vedere se cambiava qualcosa.
PURTROPPO l'errore rimane..
Ultima modifica: 2 Anni 2 Mesi fa da Lotta.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

TEST Unit su OnChange: errore o bug ?? 2 Anni 1 Mese fa #26513

  • Lotta
  • Avatar di Lotta
  • Online
  • Platinum Boarder
  • Messaggi: 450
  • Ringraziamenti ricevuti 14
  • Karma: 3
Ciao Lorenzo,
volevo chiederti come affronti un caso simile.
Come determini se è un bug del sistema di test o un errore di logica: fai un debug botton-down nell'ORM sino alle chiamate al server Postgres ?
Hai dei livelli "intermedi" di dubug (taglio prima dell'ORM, taglio prima del postrges, altro..) che consigli ?

PS
Scovato qualche problema nel codice ?
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
  • Pagina:
  • 1
  • 2
Tempo creazione pagina: 0.156 secondi

Odoo Italia Associazione - C.F: 94200470485 - Sede: Viale dei Cadorna, 83 - Firenze - Italy

Protected by R Antispam