この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは。サービスGの金谷です。
JestにはspyOnという便利なメソッドが用意されています。
これを使うとJestでのテスト時に指定したメソッドがコールされているかどうかを確認できたりします。
jest.spyOn() で Vue.js コンポーネントからのサービス呼び出しをテストする
公式ドキュメントを見ると第一引数にObject、第二引数にメソッド名(文字列)を受け取ると書かれています。
jest.spyOn(object, methodName)
では、オブジェクトのメソッドではない、ファイル直下でexportされている関数にはどう使ったらいいの・・・?
と思ったので調べてみました。
以下のようなコードを想定します。
helloWorldService.ts
export function hello(): string {
return "Hello";
}
export default function world(): string {
return "World";
}
helloWorldService.spec.ts
import { hello } from "@/helloWorldService";
import world from "@/helloWorldService";
describe("helloWorldServiceのテスト", () => {
// helloとかworldをspyOnしたい
});
結論
以下のように * asを使ってあげると上手くいきました。
default exportしている場合は関数名がdefaultになるので注意しましょう。
import * as helloWorldService from "@/helloWorldService";
describe("helloWorldServiceのテスト", () => {
it("export", () => {
const spyHello = jest.spyOn(helloWorldService, "hello");
helloWorldService.hello();
expect(spyHello).toHaveBeenCalled();
});
it("default export", () => {
const spyWorld = jest.spyOn(helloWorldService, "default");
helloWorldService.default();
expect(spyWorld).toHaveBeenCalled();
});
});
テストを書くのは楽しい!!