@toss/nestjs-aop
Version:
<!-- PROJECT LOGO --> <br /> <div align="center"> <a href="https://github.com/toss/nestjs-aop"> <img src="https://toss.tech/wp-content/uploads/2022/11/tech-article-nest-js-02.png" alt="Logo" height="200"> </a>
100 lines (80 loc) • 2.6 kB
text/typescript
import 'reflect-metadata';
import { Injectable, Module } from '@nestjs/common';
import { FastifyAdapter } from '@nestjs/platform-fastify';
import { Test } from '@nestjs/testing';
import { AopModule } from '../aop.module';
import { AutoCache, AutoCacheDecorator } from './fixture/auto-cache.decorator';
describe('Inheritance with AOP', () => {
it('should work with inherited decorated method', async () => {
let parentComputeCount = 0;
class ParentService {
getData() {
parentComputeCount++;
return 'parent data';
}
}
class ChildService extends ParentService {
getChildData() {
return 'child data';
}
}
class TestModule {}
const module = await Test.createTestingModule({
imports: [AopModule, TestModule],
}).compile();
const app = module.createNestApplication(new FastifyAdapter());
await app.init();
const childService = app.get(ChildService);
// First call - should compute
const result1 = childService.getData();
expect(result1).toBe('parent data');
expect(parentComputeCount).toBe(1);
// Second call - should use cache
const result2 = childService.getData();
expect(result2).toBe('parent data');
expect(parentComputeCount).toBe(1); // Should still be 1 (cached)
});
it('should work with inherited decorated getter', async () => {
let parentComputeCount = 0;
class ParentService {
get data() {
parentComputeCount++;
return 'parent data';
}
}
class ChildService extends ParentService {
get childData() {
return 'child data';
}
}
class TestModule {}
const module = await Test.createTestingModule({
imports: [AopModule, TestModule],
}).compile();
const app = module.createNestApplication(new FastifyAdapter());
await app.init();
const childService = app.get(ChildService);
// First call - should compute
const result1 = childService.data;
expect(result1).toBe('parent data');
expect(parentComputeCount).toBe(1);
// Second call - should use cache
const result2 = childService.data;
expect(result2).toBe('parent data');
expect(parentComputeCount).toBe(1); // Should still be 1 (cached)
});
});