2017-08-19 10 views
0

初めてユニットテストに入るだけです。テストフレームワークとしてのノードでのMochaの使用。私が遭遇したすべての例は、it()の変数を作成します。 it()の内部または外部に作成されているかどうかは重要ですか?たとえば、describe()内に複数のit()がある場合、it()のすべてに同じ模擬データが必要です。可能であれば、同じ変数を繰り返し作成しないでください。モカユニットテスト:変数の作成場所

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

答えて

4

それは、変数は、個々のitブロックの外に住んでいるが、それはあなたのユースケースによっては適切ではないかもしれない持っている完全に許容です。

変更が必要でないオブジェクトの場合は、Object.freezeは、オプション:const myObj = Object.freeze(new MyObj)です。

テストでオブジェクトが変更されると思われる場合は、beforeEachを使用して正しい状態に戻す必要があります。これにより、あなたのitブロックが互いを汚染するのを防ぎ、不愉快なデバッグの旅を避けることができます。例えば

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) 
    }) 
}) 

代わりに、あなたは脂肪の矢印構文を避け、モカでブロック間の共有コンテキストに依存することができます:

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) 
}) 
関連する問題