Jest中フック関数


まず、クラスを書き、ファイルcounterに入れます.jsでは、コードは以下の通りです.
class Counter {
    constructor () {
        this.number = 0
    }
    addOne () {
        this.number += 1
    }
    minusOne () {
        this.number -= 1
    }
}

export default Counter

次に、このクラスをテストするテストファイルを書きます.以下のとおりです.
import Counter from './counter.js'

const counter = new Counter()

test('  Counter   addOne  ', () => {
    counter.addOne()
    expect(counter.number).toBe(1)
})

test('  Counter   minusOne  ', () => {
    counter.minusOne()
    expect(counter.number).toBe(0)
})

以上、2つのテスト例間のデータは関連付けられており、これはあまりよくありません.
Jestはフック関数を提供してくれて、このような問題を処理するときに使用することができます.
これらのフック関数、例えばbeforeAll、afterAll、beforeEach...
公式サイト紹介https://jestjs.io/docs/en/api#beforeallfn-timeout
ここではbeforeEachを使えばいいです.
import Counter from './counter.js'

let counter = null
beforeEach(() => {
    counter = new Counter()
})

test('  Counter   addOne  ', () => {
    counter.addOne()
    expect(counter.number).toBe(1)
})

test('  Counter   minusOne  ', () => {
    counter.minusOne()
    expect(counter.number).toBe(-1)
})

また、以下のようにテスト例をグループ化することもできます.
import Counter from './counter.js'

let counter = null
beforeEach(() => {
    counter = new Counter()
})

describe(' ', () => {
    test('  Counter   addOne  ', () => {
        counter.addOne()
        expect(counter.number).toBe(1)
    })
    test('  Counter   addOne  ', () => {
        counter.addOne()
        expect(counter.number).toBe(1)
    })
})

describe(' ', () => {
    test('  Counter   minusOne  ', () => {
        counter.minusOne()
        expect(counter.number).toBe(-1)
    })
    test('  Counter   minusOne  ', () => {
        counter.minusOne()
        expect(counter.number).toBe(-1)
    })
})

実は上のコードは、下に等価です.
import Counter from './counter.js'

describe(' Counter', () => {
    let counter = null
    beforeEach(() => {
        counter = new Counter()
    })

    describe(' ', () => {
        test('  Counter   addOne  ', () => {
            counter.addOne()
            expect(counter.number).toBe(1)
        })
        test('  Counter   addOne  ', () => {
            counter.addOne()
            expect(counter.number).toBe(1)
        })
    })

    describe(' ', () => {
        test('  Counter   minusOne  ', () => {
            counter.minusOne()
            expect(counter.number).toBe(-1)
        })
        test('  Counter   minusOne  ', () => {
            counter.minusOne()
            expect(counter.number).toBe(-1)
        })
    })
})

では、beforeEachのフックはdescribeに属していることがわかりやすく、サブのdescribeにもフックを追加することができ、その有効範囲はその下のすべてのテスト例である.