Jestで非同期のテストをする方法

Jestというfacebookが開発したテストフレームワークを使って非同期な処理のテストをしてみます。

準備

まずはJestの準備をします。

npm install jest

プログラム

今回ファイルへの非同期書き込みをして、ファイルに書き込んだデータが入っているかをテストしてみます。

// app.js
const fs = require('fs')

module.exports.writeFile = new Promise((resolve, reject)=>{
  fs.writeFile('data.txt', 'hello', (err)=>{
    if(err) reject()
    resolve()
  })
})

テストプログラム

test関数のcallbackで引数(done)を受け取って実行することで、done()が実行されるタイミングまでテスト終了を待ってくれるようになります。

// app.test.js
const fs = require('fs')
const app = require('./app')

test('create data file', (done) => {
  app.writeFile.then(()=>{
    const data = fs.readFile('data.txt', 'utf-8', (err, data)=>{
      expect(data).toEqual('hello')
      done()
    })
  })
})

実行結果

Jest非同期テスト結果

参照