Vyhledávání na webu

Mockování dat z MongoDB pro splnění TypeScriptu v Jestu


Vytvářím TypeScript rozhraní pro každý model, který rozšiřuje mongoose.Document.

import mongoose, { Document } from 'mongoose';

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

Schéma je pak exportováno s rozhraním:

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

Problém je v tom, že v Jest není vytvoření objektu s vlastnostmi potřebnými pro testovanou funkci dostatečné, TypeScript si stěžuje na všechny chybějící pole.

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

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

getData(account);

Argument typu '{ name: string; industry: string; }' nelze přiřadit k parametru typu 'IAccount'. Typ '{ name: string; industry: string; }' postrádá následující vlastnosti typu 'IAccount': _id, increment, model a 52 dalších.ts(2345)

Jaký je nejjednodušší způsob, jak vytvořit objekt, který vyhovuje TypeScriptu pro účely testování?

Odpověď č. 1

Jednou z možností je vytvořit maketu, která odpovídá očekávanému typu...

...ale to může být velmi obtížné pro velmi složité typy.

Druhou možností je říct TypeScriptu, že chcete, aby váš mock prošel kontrolou typů během kompilace.

To můžete udělat přiřazením typu any k vašemu mocku:

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

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

getData(account);  // <= no error