はじめに
こんにちは、エンジニアのkeitaMaxです。
前回作成したESLintのテストを作成していきます。
やりたいこと
以下がエラーになっていて、
const a = [1, 2, 3]
const b = []
a.map(i => b.push(i))
以下がエラーにならない、というようなことを確認するテストを作りたいと思います。
const a = [1, 2, 3]
const b = []
a.foreach(i => b.push(i))
Jestのインストール
以下コマンドでJestをインストールします。
npm install --save-dev jest
npm install --save-dev ts-jest
package.jsonに以下を追加します。
package.json
"scripts": {
"build": "tsc",
"test": "jest test/*.ts" // 追加
},
テスト作成
以下のようにtestフォルダを作成し、notUsePushInMap.ts
をその配下に作成しました。
eslint-plugin-hitasura-system-develop
├─ src
│ ├─ index.ts
│ └─ rules
│ └─ notUsePushInMap.ts
└─ test
└─ notUsePushInMap.test.ts
テストは以下のように記載しました。
notUsePushInMap.test.ts
const { RuleTester } = require("eslint")
const rule = require("../lib/rules/notUsePushInMap")
const tester = new RuleTester()
tester.run("rule", rule, {
valid: [
{ code: "const a = [1, 2, 3];const b = [];a.foreach(i => b.push(i))" }
],
invalid: [
{ code: "const a = [1, 2, 3];const b = [];a.map(i => b.push(i))", errors: [{ message: "Do not use push inside a map method." }] }
]
})
エラーにならないものはvalid
に、エラーになるものはinvalid
に入れてテストを書いています。
実行
以下のコマンドでテストを実行します。
npm run test
% npm run test
> eslint-plugin-hitasura-system-develop@0.0.5 test
> jest test/*.ts
PASS test/notUsePushInMap.test.ts
rule
valid
✓ const a = [1, 2, 3];const b = [];a.foreach(i => b.push(i)) (16 ms)
invalid
✓ const a = [1, 2, 3];const b = [];a.map(i => b.push(i)) (3 ms)
Test Suites: 1 passed, 1 total
Tests: 2 passed, 2 total
Snapshots: 0 total
Time: 1.019 s, estimated 2 s
Ran all test suites matching /test\/notUsePushInMap.test.ts/i.
テストが成功しているのがわかります。
おわりに
この記事での質問や、間違っている、もっといい方法があるといったご意見などありましたらご指摘していただけると幸いです。
最後まで読んでいただきありがとうございました!
参考