【发布时间】:2021-11-22 08:20:08
【问题描述】:
我尝试关注this thread,但一直收到错误消息。
transform-response.interceptor.ts:
import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { ApiResponseInterface } from '@walletxp/shared-interfaces';
@Injectable()
export class TransformResponseInterceptor<T>
implements NestInterceptor<T, ApiResponseInterface<Record<string, unknown>>>
{
intercept(context: ExecutionContext, next: CallHandler): Observable<ApiResponseInterface<Record<string, unknown>>> {
return next.handle().pipe(map((data) => ({ success: true, data })));
}
}
为了测试,transform-response.interceptor.spec.ts:
import { TransformResponseInterceptor } from './transform-response.interceptor';
const interceptor = new TransformResponseInterceptor();
const executionContext: any = {
switchToHttp: jest.fn().mockReturnThis(),
getRequest: jest.fn().mockReturnThis(),
};
const callHandler = {
handle: jest.fn(),
};
describe('ResponseInterceptor', () => {
it('should be defined', () => {
expect(interceptor).toBeDefined();
});
describe('#intercept', () => {
it('t1', async () => {
(executionContext.switchToHttp().getRequest as jest.Mock<any, any>).mockReturnValueOnce({
body: { data: 'mocked data' },
});
callHandler.handle.mockResolvedValueOnce('next handle');
const actualValue = await interceptor.intercept(executionContext, callHandler);
expect(actualValue).toBe('next handle');
expect(executionContext.switchToHttp().getRequest().body).toEqual({
data: 'mocked data',
addedAttribute: 'example',
});
expect(callHandler.handle).toBeCalledTimes(1);
});
});
});
我的目标是模拟从控制器返回的数据,并检查它在通过拦截器后是否等于我想要的格式化数据。
【问题讨论】:
标签: typescript http jestjs nestjs interceptor