使用環境
- windows11
- Node.js v18.17.1
- Visual Studio Code(VSCode)
Node.js環境は構築済みのところからの記事になります。
(npm init
などは終了してプロジェクトが作成されている状態)
フォルダ構成
─ project rootフォルダ
├ scr/ : テストするTypescriptファイル用フォルダ
├ sample.ts : テスト対象ファイル
┝ test/ : テストコード用フォルダ
├ sample.test.ts : テストファイル
┝ packege.json
┝ jest.setup.ts
┝ jest.config.js
┝ tsconfig.json
┝ node_modules
必要なパッケージをインストール
Typescript環境用
- ts-node
- typescript
- @types/node
// パッケージをインストール
npm -D i "ts-node" "typescript" "@types/node"
Typescript環境を構築済みの場合はスキップ
テスト用パッケージ(Jest)
jest
@types/jest
ts-jest
// パッケージをインストール
npm -D i "jest" "@types/jest" "ts-jest"
これでテストを行うためのパッケージの準備は完了です
jestのセットアップファイルを作成
下記2つのファイルを編集します。ない場合はpackage.jsonと同じフォルダ内に作成してください。
jest.config.js
- テストの実行環境などを指定
jest.config.js
/** @type {import('ts-jest').JestConfigWithTsJest} */
module.exports ={
preset:'ts-jest',
testEnvironment:'node',
setupFilesAfterEnv:["./jest.setup.ts"]
}
jest.setup.ts
- このファイルはテストのオプション設定なので、なくてもテストは可能です
jest.setup.ts
// テストで使用したい環境変数を定義
process.env.HOGEHOGE = "env_hoge"
process.env.FUGAFUGA = "env_fuga"
// テストのタイムアウトを設定
jest.setTimeout(30000)
tsconfig.json
- VSCodeでの文法エラーの検知などを回避する設定を追加
tsconfig.json
// 一部抜粋
{
"compilerOptions": {
"target": "es2016",
"module": "commonjs",
"types": ["jest"],
},
"include": ["**/src/**/*","**/test/**/*"]
}
サンプルコードを準備
src/sample.tsにサンプルコードを記述
sample.ts
export const handler = async (event: any) => {
const env_hoge = process.env.HOGEHOGE
console.log(env_hoge)
return "finish"
};
テストコードを準備
test/sample.test.tsにテストコードを記述
sample.test.ts
import { handler } from "../src/sample";
describe("正常系",()=>{
test("環境変数をログ出力",async()=>{
// こちらでも環境変数が取得できる
const testEnvFuga = process.env.FUGAFUGA
// 環境変数が取れていることを確認
expect(testEnvFuga).toBe("env_fuga");
const event = ""
const response = await handler(event)
// レスポンスが"finish"になっていることを確認
expect(response).toBe("finish");
});
});
テストを実施
下記コマンドでプロジェクト内のテストコードをすべて実施する
npx jest
すると下記みたいな感じでテスト結果が出力されます
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 10.821 s
終わりに
以上がTypescript環境でテストを実行するまでの基本的な流れになります。
参考になれば幸いです。