JestでTypeScriptのテスト
TypeScript使うなら、テストもちゃんとやりたいよね。 インストール Jestの設定 package.jsonに以下の項目を追加します。 テスト対象コードの追加 テスト対象となるコードを書きます。 名前を入れると、 […]
広告ここから
広告ここまで
目次
TypeScript使うなら、テストもちゃんとやりたいよね。
インストール
$ npm init -y
$ npm i -D jest ts-jest @types/jest typescript
Jestの設定
package.jsonに以下の項目を追加します。
{
...
"scripts": {
"build": "tsc",
"test": "jest"
},
"devDependencies": {
"@types/jest": "^23.3.10",
"jest": "^23.6.0",
"ts-jest": "^23.10.5",
"typescript": "^3.2.2"
},
"jest": {
"moduleFileExtensions": [
"ts",
"tsx",
"js"
],
"transform": {
"^.+\\.(ts|tsx)$": "ts-jest"
},
"globals": {
"ts-jest": {
"tsConfigFile": "tsconfig.json"
}
},
"testMatch": [
"**/__tests__/*.+(ts|tsx|js)"
]
}
}
テスト対象コードの追加
テスト対象となるコードを書きます。
$ vim index.ts
export const helloWorld = (name: string): string => `Hello ${name}`
名前を入れると、Hello {YOUR_NAME}
と返してくるhelloWorld()
関数を用意しました。
テストコードの追加
続いてテストコードを書きます。
$ mkdir __tests__/
$ vim __tests__/index.test.ts
import { helloWorld } from '../index';
test('basic', () => {
expect(helloWorld('John')).toBe('Hello John');
});
test('Failed', () => {
expect(helloWorld()).toBe('Hello ');
});
あとはこれでテストを実行すればOKです。
$ npm test
FAIL __tests__/index.test.ts
● Test suite failed to run
TypeScript diagnostics (customize using `[jest-config].globals.ts-jest.diagnostics` option):
__tests__/index.test.ts:8:10 - error TS2554: Expected 1 arguments, but got 0.
8 expect(helloWorld()).toBe('Hello John');
~~~~~~~~~~~~
index.ts:5:28
5 export const helloWorld = (name: string): string => `Hello ${name}`
~~~~~~~~~~~~
An argument for 'name' was not provided.
Test Suites: 1 failed, 1 total
Tests: 0 total
Snapshots: 0 total
Time: 1.622s, estimated 2s
Ran all test suites.
npm ERR! Test failed. See above for more details.
2つ目のテストがこけました。これは関数側でstringの引数を指定しているのに、テストでは引数を指定していないからですね。
おわりに
こんな要領でJestをつかったTypeScriptのテストが実行できます。–watchオプションをつければwatchモードにもできますので、積極的に使っていきたいところです。