2017-08-19 2 views
0

Je commence tout juste à faire des tests unitaires pour la première fois. Utilisation de Mocha dans Node comme cadre de test. Tous les exemples que j'ai rencontrés créent des variables à l'intérieur du it(). Est-ce important si elles sont créées à l'intérieur ou à l'extérieur de it()? Par exemple, si j'ai plusieurs it() s à l'intérieur d'un describe(), et j'ai besoin des mêmes données moqueuses à travers tous les it() s. Je préfère ne pas recréer la même variable à plusieurs reprises, si possible.Tests unitaires de moka: où créer des variables

describe ('MyClass', function() { 
    let myObj = new MyObj // Mock data here 
    it ('Should be...', function() { 
     .... 
    }) 
    it ('Should be...', function() { 
     .... 
    }) 
    ... 
}) 

Répondre

4

Il est tout à fait acceptable d'avoir des variables vivent en dehors de vos it différents blocs, mais il peut ne pas être approprié en fonction de votre cas d'utilisation. Pour les objets que vous ne vous attendez pas à modifier, Object.freeze est une option: const myObj = Object.freeze(new MyObj).

Si vous attendez que vos tests changent votre objet, vous devez utiliser beforeEach pour vous assurer qu'ils sont restaurés à l'état correct; Cela évitera que vos blocs it ne se polluent les uns les autres et évitent un parcours de débogage désagréable.

Par exemple:

describe('MyClass', function() { 
    let myObj 

    beforEach(() => { 
    myObj = new MyObj() 
    }) 

    it('changes myObj',() => { 
    changeProp(myObj.sum) 
    expect(myObj.sum).toEqual(4) 
    }) 

    it('depends on myObj being the same',() => { 
    expect(myObj.sum).toEqual(2) 
    }) 
}) 

Alternativement, vous pouvez éviter la syntaxe de la flèche de la graisse et appuyer sur le contexte partagé entre blocs mocha:

beforeEach(function() { 
    this.myObj = new MyObj() 
}) 

it('changes myObj', function() { 
    addTwo(this.myObj.sum) 
    expect(this.myObj.sum).toEqual(4) 
}) 

it('depends on myObj being the same', function() { 
    expect(this.myObj.sum).toEqual(2) 
})