2015-11-13 3 views
0

Je commence à utiliser Lab pour tester mon API. L'API effectue les opérations CRUD habituelles et je me demande comment tester les méthodes Update et Delete qui nécessitent un ID de document.Test de l'API Hapijs avec Lab

Mon API renvoie le document mongo nouvellement créé à l'intérieur de response.payload. Ce que je ne comprends pas, c'est pourquoi dans le test DELETEresultId est undefined.

Voici mon code:

lab.experiment('User module',() => { 

    var resultId; // Initialize a variable to save the document ID later. 

    lab.test('should create user', (done) => { 
     var options = { 
      method: 'POST', 
      url: '/api/v1/users', 
      payload: { 
       username: 'testUser', 
       password: 'testPassword' 
      } 
     }; 

     server.inject(options, (response) => { 
      resultId = response.payload._id; // Update resultId 
      Code.expect(response.statusCode).to.equal(200); 
      done(); 
     }); 
    }); 

    lab.test('should delete user', (done) => { 
     var options = { 
      method: 'DELETE', 
      url: '/api/v1/users/' + resultId // Turns out resultId is undefined 
     }; 

     server.inject(options, (response) => { 
      Code.expect(response.statusCode).to.equal(200); 
      done(); 
     }); 
    }); 

}); 

Répondre

0

Si vous êtes en cours d'exécution laboratoire avec le drapeau -p, vos deux cas de test se dérouleront en parallèle. Ce qui signifie que le deuxième scénario de test évalue la valeur de resultId avant qu'elle ne soit modifiée par le premier scénario de test.

Il est déconseillé de faire dépendre un cas de test d'un autre cas de test en modifiant une variable commune. Vos cas de test doivent être totalement indépendants les uns des autres. Supprimer/ajouter un cas de test ne doit jamais en casser un autre. Ce serait une vraie douleur pour la maintenance.

Faites vos tests atomiques et aussi distincts que possible. Même si cela signifie une répétition. Ou vous pouvez utiliser lab.beforeEach si vous devez configurer un état commun avant chaque test.

+0

Je n'utilise pas le drapeau '-p', mais je vois comment avoir un test dépendant du résultat d'un autre est mauvais. Merci d'avoir fait remarquer cela. Cependant, comment dois-je tester les terminaux qui nécessitent l'existence d'un document mongo? –

+0

Vous pouvez simuler votre objet de base de données. Ou utilisez une base de données de test avec des appareils. –

+0

@MattHarrison juste un exemple simple serait grandement apprécié :) – Whisher