Try using it in your preferred language.

English

  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar
translation

これはAIが翻訳した投稿です。

제이의 블로그

NestJS での単体テストのための Prisma Client モッキング

言語を選択

  • 日本語
  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar

durumis AIが要約した文章

  • 単体テストのために、外部依存関係を排除することが重要です。
  • Prisma ORM の Prisma Client を jest-mock-extended パッケージを使用して簡単にモッキングできます。
  • モッキング後、単体テストの作成が容易になりました。

アプリケーション単位のテストは、隔離された状態で実行することが原則であるため、テスト結果に影響を与える可能性のあるネットワーク I/O や データベースなどの外部依存性を排除するのが良いでしょう。

今回は、トイプロジェクトに Prisma ORM を使うことになったので、単体テストのために Prisma Client を簡単にモックする方法を探して記録しようと思い、 作成しました。


jest-mock-extended パッケージのインストール

Prisma の公式ドキュメントでも推奨されているパッケージを上記の command でインストールします。


Prisma Client のモック化

describe('UserService', () => {
let service: UserService;
let prismaMock: DeepMockProxy;

beforeEach(async () => {
    prismaMock = mockDeep();

    const module: TestingModule = await Test.createTestingModule({
      providers: [
        UserService,
        {
              provide: PrismaService,
              useValue: prismaMock,
        },
      ],
    }).compile();

    service = module.get(UserService);


 単体テストのコード例

  describe('create', () => {
    it('ユーザーの作成に成功するとユーザー情報を返す必要がある', async () => {
        // Arrange
        const newUser = {
            email: 'test@test.com',
            password: 'test1234',
        };
        
          prismaMock.user.create.mockResolvedValue({
            id: 1,
            email: 'test@test.com',
            password: 'test1234',
          });

          // Act
          const result = await service.create(newUser);

          // Assert
          expect(result).toEqual({
            id: 1,
            email: 'test@test.com',
            password: 'test1234',
          });
    });

モック化後は型もサポートされるため、単体テストの作成が非常に便利になりました。

Jay
제이의 블로그
1인분이 목표인 초보 개발자
Jay
カンバンボードプロジェクト1 概念的データモデリング Wantedlyバックエンドインターンシップ課題だったカンバンボードプロジェクトをリレーショナルデータモデリング練習目的で再実装し、概念的データモデリングを行いました。 エンティティ分離、識別子定義、関係把握などの過程を経て、以前よりスムーズにモデリングを完了しました。

2024年4月9日

物理データモデリング 物理データモデリングは、リレーショナルデータベースのテーブルを実際に使用できるように設計するプロセスであり、ストレージスペースの効率性、データパーティショニング、インデックス設計などを通じて、パフォーマンスの最適化を目指しています。遅いクエリ分析、インデックスの活用、キャッシュの適用などにより、パフォーマンスの問題を解決できます。必要に応じて、デノーマライズ手法を使用することもできます。

2024年4月9日

リレーショナルデータモデリング リレーショナルデータモデリングは、現実世界の情報をテーブルとデータに分割するプロセスであり、要件分析、概念データモデリング、論理データ モデリング、物理データモデリングの段階を経ます。カラスの足記号を使用したERDを通じて概念モデリングを視覚化し、SQL文で実際の データベースに適用できます。

2024年4月8日

1人アプリ開発ではどのようなテストを実施すべきか? アプリ開発時のテストの優先順位を決め、効率的なテスト戦略を立てる方法を学んでみましょう。 著者は、人テスト、統合テスト、ユニットテスト、受入/ウィジェットテストの順に優先順位をつけ、時間効率性を重視しています。 1人開発環境に適した実用的なテスト戦略を確認しましょう。
Alien Story
Alien Story
Alien Story
Alien Story
Alien Story

2024年5月16日

[エフェクティブ・Java] アイテム 5. リソースを明示的に指定するのではなく、依存オブジェクトの注入を使用する クラスが外部リソースに依存する場合、シングルトンと静的ユーティリティクラスは使用しないことをお勧めします。依存オブジェクトの注入により、 クラスの柔軟性、再利用性、テスト容易性を向上させることができ、ファクトリメソッドパターンを活用すれば、より効率的な依存オブジェクトの 注入が可能になります。
제이온
제이온
제이온
제이온

2024年4月28日

[非専攻、開発者として生き残る] 17. 新卒開発者のポートフォリオ、どこまで? 新卒開発者のポートフォリオは、開発能力に集中することが重要です。 Infraまで実装するよりも、基本的なCRUD機能を完成させ、外部API 連携経験を積む方が効果的で、ネイバーログイン、ネイバーマップAPI、公共データポータルAPIなどを活用してみることができます。
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

2024年4月3日

[エフェクティブ・Java] アイテム 3. プライベートコンストラクタまたは列挙型でシングルトンであることを保証する Javaでのシングルトンパターンの実装方法3つ(public static メンバー、静的ファクトリメソッド、列挙型)を紹介し、それぞれの方法の長所と短所、シリアライズ時の注意点について説明します。リフレクション攻撃に対する安全性とコードの簡潔さを考慮して、列挙型方式を最も望ましい方法として提示します。(出典:エフェクティブ・Java、 https://catsbi.oopy.io/d7f3a636-b613-453b-91c7-655d71fda2b1)
제이온
제이온
제이온
제이온

2024年4月27日

[オブジェクト] 第1章. オブジェクト、設計 ソフトウェア開発では、実践は理論よりも重要であり、優れた設計はコードの理解を容易にし、変更に柔軟に対応できるようにします。オブジェクト 指向設計は、協力するオブジェクト間の依存関係を適切に管理する方法を提供し、これによりコードの保守性と拡張性を向上させることができます。
제이온
제이온
제이온
제이온

2024年4月28日

記事テスト ドゥルミス AIのプレビューはありません。
안민수
안민수
안민수
안민수

2024年4月29日