jestを使って4つのフェーズでテスト
テストにおける4つのフェーズについて
テストには、4つのフェーズでテストする方法があり、
1.準備(setup)、
2.実行(exercise)、
3.検証(verify)、
4.後片付け(teardown)
という流れになっています。
今回は、nodeで実装しています。
テストのときだけdynamoDBにデータを入れるようにし、
そのデータを使ってラムダを呼んだ時のテストをしています。
~意識すること~
➡test()の中でsetup~teardownを行う。そうすると、テストケースごとに、パラメータやテストデータやレスポンス内容などキレイに分けることができる。
1.準備(setup)
➡パラメータの用意をしたり、データベースにテスト用のデータを入れたり。
テスト前にあらかじめテスト用のデータを入れておくのもよいですが、
テストのときだけとあるデータを入れてテストをしたくなる場合があるので、
今回はテストのときにデータを入れる感じにしています。
2.実行(exercise)
➡テスト対象の関数を呼ぶ
3.検証(verify)、
➡jestのexpectを使ってレスポンス内容が意図したものになってるかを検証
4.後片付け(teardown)
➡DB接続を切断したりする例があったりしますが、そういうのは内部でやってるので今回は無し
プログラム
anime-suko.ts
const putHogeTable = () => {
return new Promise((resolve) => {
const items = [
{
id: 'hoge-00001',
name: 'あやねる',
},
{
id: 'hoge-00002',
name: '小倉',
},
]
interface ItemsInterface {
id: string
name: string
}
const putRequest: { PutRequest: { Item: ItemsInterface } }[] = []
items.forEach((item) => {
const obj = {
PutRequest: {
Item: item,
},
}
putRequest.push(obj)
})
const params = {
RequestItems: {
requester: putRequest,
},
}
documentClient.batchWrite(params, (err, data) => {
if (err) {
console.log('[ERROR] ' + err)
resolve(null)
} else {
resolve(data)
}
})
})
}
//共通setup
const putCommon = () => {
putHogeTable()
}
/*
* 正常系1(全てのパラメータが存在する)
* 前提条件:パラメータ内にメッセージID(messageID)が存在すること
* 期待結果:ステータスコードが200で返ってくること
*/
const testCase1 = test('正常系1(全てのパラメータが存在する)', async () => {
//setup
putCommon()
const testSuccessParameterJson2 = {
id: 'hoge-00001',
messageID: 'hogeMessage1',
}
const testSuccessParameterStr2 = JSON.stringify(testSuccessParameterJson2)
jest
.spyOn(callLambdaModule, 'callLambda')
.mockResolvedValueOnce(Promise.resolve({ statusCode: 200 }))
const testSuccessExpectResponse = {
statusCode: 200,
}
//Exercise
const actual = await hogeLambdaFunction()
//verify
//ステータスコードが200で返ってくること
expect(actual).toStrictEqual(testSuccessExpectResponse)
})
まとめ
jestでのテストの方法をググったりすると、普通にレスポンスが意図したものかどうかみたいな記事はいっぱい見つかるが、今回扱った4つのフェーズを
意識したテストというのを会社で学べたのは良かった。
Author And Source
この問題について(jestを使って4つのフェーズでテスト), 我々は、より多くの情報をここで見つけました https://qiita.com/AAA0125/items/343b55a2e35e0b8b1be1著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .