Merged PR 331: UnitTestユーティリティの内部的な仕組みを改善する

## 概要
[Task2418: UnitTestユーティリティの内部的な仕組みを改善する](https://paruru.nds-tyo.co.jp:8443/tfs/ReciproCollection/fa4924a4-d079-4fab-9fb5-a9a11eb205f0/_workitems/edit/2418)

- 上書きするメソッド名を型から取得するよう修正

## レビューポイント
- 修正内容として妥当か
- 懸念点がないか

## 動作確認状況
- npm run testで成功
This commit is contained in:
湯本 開 2023-08-16 07:51:14 +00:00
parent 924106d608
commit ae88da1728

View File

@ -1,5 +1,10 @@
import { ConflictError } from '../../gateways/adb2c/adb2c.service'; import {
AdB2cService,
ConflictError,
} from '../../gateways/adb2c/adb2c.service';
import { SendGridService } from '../../gateways/sendgrid/sendgrid.service';
import { User, newUser } from '../../repositories/users/entity/user.entity'; import { User, newUser } from '../../repositories/users/entity/user.entity';
import { UsersRepositoryService } from '../../repositories/users/users.repository.service';
// ### ユニットテスト用コード以外では絶対に使用してはいけないダーティな手段を使用しているが、他の箇所では使用しないこと ### // ### ユニットテスト用コード以外では絶対に使用してはいけないダーティな手段を使用しているが、他の箇所では使用しないこと ###
@ -19,12 +24,11 @@ export const overrideAdB2cService = <TService>(
) => Promise<{ sub: string } | ConflictError>; ) => Promise<{ sub: string } | ConflictError>;
}, },
): void => { ): void => {
const { createUser } = overrides;
// テストコードでのみ許される強引な方法でprivateメンバ変数の参照を取得 // テストコードでのみ許される強引な方法でprivateメンバ変数の参照を取得
const obj = (service as any).adB2cService; const obj = (service as any).adB2cService as AdB2cService;
if (createUser) { if (overrides.createUser) {
Object.defineProperty(obj, createUser.name, { Object.defineProperty(obj, obj.createUser.name, {
value: createUser, value: overrides.createUser,
writable: true, writable: true,
}); });
} }
@ -58,24 +62,18 @@ export const overrideSendgridService = <TService>(
) => Promise<void>; ) => Promise<void>;
}, },
): void => { ): void => {
const {
createMailContentFromEmailConfirm,
createMailContentFromEmailConfirmForNormalUser,
sendMail,
} = overrides;
// テストコードでのみ許される強引な方法でprivateメンバ変数の参照を取得 // テストコードでのみ許される強引な方法でprivateメンバ変数の参照を取得
const obj = (service as any).sendgridService; const obj = (service as any).sendgridService as SendGridService;
if (sendMail) { if (overrides.sendMail) {
Object.defineProperty(obj, sendMail.name, { Object.defineProperty(obj, obj.sendMail.name, {
value: sendMail, value: overrides.sendMail,
writable: true, writable: true,
}); });
} else { } else {
// [重要] // [重要]
// sendMailだけは外部に対する送信を行ってしまう & 失敗によりメールアドレス自体の信頼度が変動してしまうため、 // sendMailだけは外部に対する送信を行ってしまう & 失敗によりメールアドレス自体の信頼度が変動してしまうため、
// overrideした場合には"必ず"偽物の呼び出しになるようにしておく // overrideした場合には"必ず"偽物の呼び出しになるようにしておく
Object.defineProperty(obj, sendMail.name, { Object.defineProperty(obj, obj.sendMail.name, {
value: async () => { value: async () => {
return; return;
}, },
@ -83,19 +81,19 @@ export const overrideSendgridService = <TService>(
}); });
} }
if (createMailContentFromEmailConfirm) { if (overrides.createMailContentFromEmailConfirm) {
Object.defineProperty(obj, createMailContentFromEmailConfirm.name, { Object.defineProperty(obj, obj.createMailContentFromEmailConfirm.name, {
value: createMailContentFromEmailConfirm, value: overrides.createMailContentFromEmailConfirm,
writable: true, writable: true,
}); });
} }
if (createMailContentFromEmailConfirmForNormalUser) { if (overrides.createMailContentFromEmailConfirmForNormalUser) {
Object.defineProperty( Object.defineProperty(
obj, obj,
createMailContentFromEmailConfirmForNormalUser.name, obj.createMailContentFromEmailConfirmForNormalUser.name,
{ {
value: createMailContentFromEmailConfirmForNormalUser, value: overrides.createMailContentFromEmailConfirmForNormalUser,
writable: true, writable: true,
}, },
); );
@ -114,12 +112,11 @@ export const overrideUsersRepositoryService = <TService>(
createNormalUser?: (user: newUser) => Promise<User>; createNormalUser?: (user: newUser) => Promise<User>;
}, },
): void => { ): void => {
const { createNormalUser } = overrides;
// テストコードでのみ許される強引な方法でprivateメンバ変数の参照を取得 // テストコードでのみ許される強引な方法でprivateメンバ変数の参照を取得
const obj = (service as any).usersRepository; const obj = (service as any).usersRepository as UsersRepositoryService;
if (createNormalUser) { if (overrides.createNormalUser) {
Object.defineProperty(obj, createNormalUser.name, { Object.defineProperty(obj, obj.createNormalUser.name, {
value: createNormalUser, value: overrides.createNormalUser,
writable: true, writable: true,
}); });
} }