我找不到任何关于如何在NestJS中测试拦截器的说明。
请帮我用笑话测试一下拦截器?
import { Injectable, NestInterceptor, ExecutionContext, CallHandler, RequestTimeoutException } from "@nestjs/common";
import { Observable, throwError, TimeoutError } from "rxjs";
import { catchError, timeout } from "rxjs/operators";
@Injectable()
export class TimeoutInterceptor implements NestInterceptor {
constructor(private readonly interval: number) {}
intercept(_context: ExecutionContext, next: CallHandler): Observable<any> {
if (this.interval > 0) {
return next.handle().pipe(
timeout(this.interval),
catchError((error) => {
if (error instanceof TimeoutError) {
return throwError(new RequestTimeoutException(`The operation timed out. `));
}
return throwError(error);
}),
);
}
return next.handle();
}
}
2条答案
按热度按时间4ioopgfo1#
我曾经试着为这个拦截器编写单元测试,但我不喜欢它:/看:https://gist.github.com/micalevisk/33d793202541f044d8f5bccb81049b94
nx7onnlm2#
我试着在那里找到类似的问题,希望有人愿意回答,但直到今天我仍然一无所获。尽管如此,我还是试着独自解决这个问题。对于那些可能正在寻找解决方案的人来说。
让我们看一看nestjsdocs中的简单超时拦截器示例
测试可观察对象内部错误的可能单元测试是模拟指定时间(延迟)后的返回值。在这种情况下,它将大于5000。这可以通过使用delay rxjs运算符来实现。
因此,这个超时拦截器的适当单元测试应该类似于以下内容。