2009-09-30 6 views
0

nosetest est le framework de test par défaut de Turbogeras 2.0. L'application a un module websetup.py qui initialise la base de données. J'utilise MySQL pour mon environnement de développement et de production et WebSetup fonctionne très bien, mais nosetest utilise sqlite sur la mémoire et quand il essaie d'initialiser le DB envoie une erreur:Comment savoir quand nosetest s'exécute par programme

TypeError: SQLite Date, Time, and DateTime types only accept Python datetime objects as input.

J'ai détecté lorsque cela se produit et est dans le fase d'import:

csvreader = csv.reader(open('res/products.csv'), delimiter=",", quotechar="'") 
for row in csvreader: 
    p = model.Product(row[1], row[2], row[3], row[4] + ".jpg") 
    # Even tried to convert the date to a sqlalchemy type 
    # need to put a conditional here, when testing I don't care this date 
    import sqlalchemy 
    dateadded = sqlalchemy.types.DateTime(row[5]) 
    p.dateAdded = dateadded 
    p.brand_id = row[6] 
    p.code = row[3] 

    ccat = model.DBSession.query(model.Category)\ 
     .filter(model.Category.id==int(row[8]) + 3).one() 

    p.categories.append(ccat) 

    p.normalPrice = row[9] 
    p.specialPrice = row[10] 
    p.discountPrice = row[11] 

    model.DBSession.add(p) 

Comment puis-je savoir quand nosetest fonctionne? J'ai essayer:

if globals().has_key('ModelTest'): 

et

if vars().has_key('ModelTest'): 

Le premier avec aucun résultat et le second avec l'erreur

Répondre

0

On peut supposer que si le nez coule, le module de niveau supérieur aura été importé. Vous devriez être en mesure de vérifier que avec

if 'nose' in sys.modules: 
    print "Nose is running, or at least has been imported!" 
    #or whatever you need to do if nose is running 

Bien sûr, ce n'est pas un test à toute épreuve, ce qui suppose qu'il n'y a pas d'autre raison pour laquelle serait importé nez.

+0

Ça l'a fait! juste avant l'assignation de variable, j'ai mis la condition et maintenant mes nosestests fonctionnent à nouveau. Je vous remercie – Juparave

0

Je ne l'utilise pas TurboGears, mais est-il pas un paramètre ou global quelque part qui indique que les tests sont en cours d'exécution? Dans les grands systèmes, de petits changements doivent souvent être apportés lors de l'exécution des tests. Basculer entre SQLite et MySQL n'est qu'un exemple.

+0

Eh bien, il doit être quelque part, je pensais que ModelTest serait un bon drapeau, mais je suis nouveau pour python et nosetest. – Juparave

Questions connexes