質問するログイン新規登録

Q&A

0回答

150閲覧

node:cryptoのテストをvitestで書くとエラーが出る

react_q3

総合スコア22

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Vitest

Vitestは、Vite環境で利用できるテストフレームワークです。VueやReactといったさまざまなフレームワークで動作することが可能。シンプルで直感的な構文を採用しており、実行速度が速い点も特徴です。

0グッド

2クリップ

投稿2024/12/17 12:29

0

2

実現したいこと

下記関数のテストをvitestで書きたいです

ts

1import { randomUUID } from "node:crypto"; 2 3export const getRandomUUID = (): string => { 4 return randomUUID(); 5}

発生している問題・分からないこと

上記関数に対して、下記のようなテストコードを書きました。

ts

1import { beforeEach, describe, expect, it, vi } from "vitest"; 2import { getRandomUUID } from "./utils"; 3 4vi.mock("node:crypto", () => { 5 return { 6 randomUUID: vi.fn(() => "mock-uuid"), 7 }; 8}); 9 10describe("getRandomUUID", () => { 11 it("mock-uuid", () => { 12 const uuid = getRandomUUID(); 13 14 expect(uuid).toBe("mock-uuid"); 15 }); 16});

すると、下記のようなエラーが出ました

bash

1Error: [vitest] No "default" export is defined on the "node:crypto" mock. Did you forget to return it from "vi.mock"? 2If you need to partially mock a module, you can use "importOriginal" helper inside:

よって、mock部分を下記のように書き換えました

ts

1vi.mock("node:crypto", async () => { 2 const actual = await vi.importActual<typeof import("node:crypto")>("node:crypto"); 3 return { 4 ...actual, 5 randomUUID: vi.fn(() => "mock-uuid"), 6 }; 7});

そうすると、次のようなエラーが出ました

bash

1AssertionError: expected '5cedbc46-aaaf-40f3-9943-fbaedb9da36b' to be 'mock-uuid' // Object.is equality 2 3- Expected 4+ Received 5 6- mock-uuid 7+ 5cedbc46-aaaf-40f3-9943-fbaedb9da36b

これはrandomUUIDを適切にモックできていないことから起きるAssertionErrorだと思うのですが解決方法がわからず、教えていただきたいです

エラーメッセージ

error

1上述の通り、エラーは解消されませんでした

該当のソースコード

TypeScript

1特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

特に解決方法が見つかりませんでした

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問