Vue.js で plugin のテストを書いた時のメモ。prototype に登録したプラグインって、どうやって Jest から呼べばいいんだろうってちょっと悩んだ。最終的に localVue.use() してからlocalVue.prototype.$hoge() って実行すればちゃんと Jest からでも実行できた。
テスト対象コード
例えば、HTTP ステータスコードによって処理を行う処理があったとする。本来であればテストしやすいように install とは別ファイルでロジックを管理するべきなんだろうけど。元がこうなっていたので、このコードを保ったままユニットテストを書く。
export const MyPlugin = {
install(Vue) {
Vue.prototype.$myPlugin = (statusCode: number) => {
switch (statusCode) {
case 401:
/* 処理省略 */
break;
case 500:
/* 処理省略 */
break;
default:
/* 処理省略 */
break;
}
};
}
};
テストコード
テストコードはこんな感じ。vue-test-utils の createLocalVue でインスタンスを作成して、 use() でプラグインを適用。その後 prototype から $myPlugin を直接呼べば良い。
import { createLocalVue } from "@vue/test-utils";
import { MyPlugin } from "my-plugin.ts";
const localVue = createLocalVue();
localVue.use(MyPlugin);
describe("MyPlugin", () => {
it("引数が401の場合", () => {
localVue.prototype.$myPlugin(401);
});
it("引数が500の場合", () => {
localVue.prototype.$myPlugin(500);
});
});
Vue のテストコードといえば shallowMount を使ってコンポーネントのユニットテストをよく書いていたけど、いざプラグインのテストを書こうと思ったら、なかなか思い付かず。vue-test-utils は便利。