1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ReferenceError: Cannot access 'mockUser' before initializationのエラーの解消方法

Posted at

はじめに

テスト作成において記述順があっているはずだが、エラーが発生し続けたので解消方法を記述しようと思います。

エラー内容

ReferenceError: Cannot access 'mockUser' before initialization

これは、jest.mock の中で mockUser を使っていますが、mockUser の宣言より前に実行されるため、JavaScriptより参照できないと怒られてしまっています。

エラー内容のコード

const mockUser = { ... };  // 宣言済み
jest.mock("../../supabaseClient", () => {
  supabase: {
    ...
    single: jest.fn().mockResolvedValue({ data: mockUser, error: null }),
  }
});

最初に記述している内容だと、間違いなく先に宣言していたのですがエラーとなっておりました。

ですが、jest.mock はモジュールのトップレベルで即座に評価されるので、外で定義した mockUser を参照しても、Jest がモジュールを読み込むタイミングによってはまだ mockUser が初期化されていない という現象が起きます。

解決策

jest.mockの中にmockUserを記述しました。

jest.mock("../../supabaseClient", () => {
const mockUser = { ... };  // 宣言
  supabase: {
    ...
    single: jest.fn().mockResolvedValue({ data: mockUser, error: null }),
  }
});

こうすることによりjest.mockの中で一番最初に参照されるため、呼び出し順のエラーを防ぐことに成功しました。
しかしこの記述方法ではコードの下の方にmockUserを使用している場合は、参照できなくなってしまうので、それは別の参照ファイルでmockUserを作成し力技で解決しました。💦

おわりに

今回はjest.mock内で参照し、更にmockUserファイルを作成し二度宣言してしまっているので他の解決策などがあれば教えていただきたいです。🙏

ISOUのメンバー募集中!

プログラミングコーチングJISOUでは、新たなメンバーを募集しています。
日本一のアウトプットコミュニティでキャリアアップしませんか?
興味のある方は、ぜひホームページをのぞいてみてください!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?