ウェブサイト検索

JestでTypeScriptを満たすためにMongoDBのデータをモックする


私は、mongoose.Documentを拡張する各モデルのためにTypeScriptのインターフェースを作成しています。

import mongoose, { Document } from 'mongoose';

export interface IAccount extends Document {
  _id: mongoose.Types.ObjectId;
  name: string;
  industry: string;
}

そのスキーマは次のインターフェースでエクスポートされます:

export default mongoose.model<IAccount>('Account', accountSchema);

問題は、Jestでは、テスト対象の関数に必要なプロパティを持つオブジェクトを作成するだけでは不十分であり、TypeScriptがすべての不足しているフィールドについて文句を言うことです。

function getData(account: IAccount){
  return account;
}

const account = {
  name: 'Test account name',
  industry: 'test account industry'
}

getData(account);

型 '{ name: string; industry: string; }' の引数は型 'IAccount' のパラメータに割り当てることができません。型 '{ name: string; industry: string; }' には型 'IAccount' から次のプロパティが欠けています: _id、increment、model、およびさらに52個.ts(2345)

テスト目的でTypeScriptを満たすオブジェクトを作成する最も簡単な方法は何ですか?

回答 #1

一つの方法は、予想される型に一致するモックを作成することです...

...しかし、それは非常に複雑な型にとっては非常に難しいことがあります。

もう一つのオプションは、モックがコンパイル時の型チェックを通過することをTypeScriptに伝えることです。

それは、モックに型 any を割り当てることで行うことができます:

function getData(account: IAccount){
  return account;
}

const account: any = {  // <= use type "any"
  name: 'Test account name',
  industry: 'test account industry'
}

getData(account);  // <= no error