jestインストール
jestインストール
$ npm install --save-dev jest
jsx構文のトランスパイルのため、babel等をインストール
$ npm install --save-dev babel-jest babel-core babel-preset-env babel-preset-react
jest設定
jest設定ファイルを生成
$ jest --init
これで最低限jestでテスト実行できる。
.js
をjsx構文で解釈させるために設定が必要。
修正
jest.config.js
modlue.exports = {
// ...
transform: { "^.+\\.jsx?$": "babel-jest" } // 拡張子がjs,jsxのファイルをbabel-jestでトランスパイルさせる
// ...
}
追加
jest.config.js
module.exports = {
presets: ["@babel/preset-env", "@babel/preset-react"]
};
Enzymeのインストール
インストール
yarn add --dev enzyme enzyme-adapter-react-16
Enzymeの利用時は一度だけEnzyme.configure()
を呼ぶ必要があるため、下記のスクリプトを追加。
jest.setup.js
import Enzyme from "enzyme";
import Adapter from "enzyme-adapter-react-16";
Enzyme.configure({ adapter: new Adapter() });
Jestのテスト前に実行されるようにする。
jest.config.js
module.exports = {
// ...
setupFiles: ['./jest.setup.js'],
// ...
}
jest実行でエラー
「regeneratorRuntime is not defined」
jestのテスト対象コードでasync/awaitを使っているとこのエラーが出るようです。
回避方法は以下。
.babelrcを以下のようにする
.babelrcはpackage.jsonと同じディレクトリに配置しました。
{
"presets": [
[
"@babel/preset-env", {
"targets": { // babelのターゲットを指定
"node": "current"
}
}
]
]
}
参考
Next.jsのプロジェクトにJestとEnzymeを導入する手順
asyncを使用したコードをjestでテストすると「regeneratorRuntime is not defined」エラーが発生