こんにちは、スープです。
医療テックのスタートアップのお手伝いをしています。
DIしたオブジェクトのメソッド呼び出し方法を調べました。
わかりやすくするために、シンプルな例を示します。
export class CarFactory {
constructor(private logger: ILogger) {}
public create(name: string): void {
this.logger.log(`creating ${name} car...`)
}
}
このとき、コンストラクターインジェクションされた logger
の log
が呼ばれていることをテストしてみます。
describe('CarFactory', () => {
test('create', () => {
const logger = new Logger();
const carFactory= new CarFactory(logger);
const spy = jest.spyOn(logger, 'log');
// オプショナルで、Logger.log の挙動を指定したい場合は mockImplementation を呼ぶ
spy.mockImplementation(() => console.log('log is being called'));
const carName = 'Toyota'
carFactory.create(carName);
// 呼び出されていることをチェック
expect(logger.log).toHaveBeenCalled();
// 想定通りの引数で呼び出されていることをチェック
expect(logger.log).toHaveBeenCalledWith(`creating ${carName} car...`);
// これでリセットできる
spy.mockRestore();
});
});
参考