Wallaby + Vue CLI + GraphQLの環境構築
Vue CLI + GraphQL な環境に Wallaby を入れる時にハマってしまったので、忘れないうちに備忘録 公式ドキュメントに沿ったやり方で進めていたがそれだとエラーが起きてしまったので、その対処法という感じ GraphQL のライブラリは、広く使われていそうなvue-apolloを使う
流れ
- Vue CLI でプロジェクト作成
- Jest を導入
- vue-apollo を導入
- Wallaby を導入
Vue CLI で新しくプロジェクト作成
Vue CLI でプロジェクトを作成(現時点だと Vue CLI v3)
vue create hogehoge
Jest を導入
Vue CLI で作っただけだと Jest は入ってないので、Jest を導入する 一般的な Jest の構成を Vue CLI Plugin を使って導入
vue add @vue/unit-jest
vue-apollo を導入
こちらも Vue CLI Plugin で vue-apollo が入れられるので導入する
vue add apollo
Wallaby を導入
ここがハマったところ 特に GraphQL が絡んでいるので、Wallaby 公式の Vue のやり方をそのままやっても動かない
まずは必要なモジュールをインストール
yarn add -D wallaby-vue-compiler
yarn add -D jest-transform-graphql
wallaby.js
をルートに配置
module.exports = (wallaby) => {
process.env.VUE_CLI_BABEL_TRANSPILE_MODULES = true;
const compiler = wallaby.compilers.babel({
presets: [["@vue/app", { modules: "commonjs" }]],
});
return {
files: ["src/**/*", "jest.config.js", "package.json"],
tests: ["tests/**/*.spec.js"],
env: {
type: "node",
runner: "node",
},
compilers: {
"**/*.js": compiler,
"**/*.vue": require("wallaby-vue-compiler")(compiler),
},
preprocessors: {
"**/*.vue": (file) =>
require("vue-jest").process(file.content, file.path),
},
setup: function (wallaby) {
const jestConfig = require("./package").jest || require("./jest.config");
delete jestConfig.transform["\\.vue$"];
delete jestConfig.transform["\\.jsx?$"];
wallaby.testFramework.configure(jestConfig);
},
testFramework: "jest",
debug: true,
};
};
この wallaby.js の中身で公式ドキュメントと違う部分が唯一あって
delete jestConfig.transform["\\.vue$"];
delete jestConfig.transform["\\.jsx?$"];
の部分
こうしないと、.gql
の GraphQL ファイルを Wallaby が変換しようとして、SyntaxError: Invalid or unexpected token
のようなエラーが発生してしまう
最後に、jest.config.js
のtransform
を下記のように修正する
transform: {
'\\.gql$': 'jest-transform-graphql',
'\\.vue$': 'vue-jest',
'.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': 'jest-transform-stub',
'\\.jsx?$': 'babel-jest',
},
Jest で GraphQL ファイルを扱えるようにする jest-transform-graphql
を指定するのと
'\\.vue$': 'vue-jest',
'\\.jsx?$': 'babel-jest',
の指定方法を変えないと
[Vue warn]: Failed to mount component: template or render function not defined.
のような warn が出たり、
TypeError: wrapper.vm.hoge is not a function
のようなエラーが出て、Wallaby が正常に動かない
結果的にyarn test
は通るけど Wallaby だけエラーが出て、Wallaby を使う意味がなくなってしまう
ので、上記のように修正する必要があった
この状態で Wallaby を動かすと、GraphQL を読んでる vue ファイルを import しても無事に Wallaby は動いてくれた。
yarn test
も同様にちゃんと動いてるのが確認出来た。