title: Unit Test Nest JS Filter Catch Method
body: <p>I would like to write unit test for Nest JS Filter that has Catch Method.
  How do I pass/mock the parameter that is passed when exception happen. 
  How to assert the logger.error is called.</p>
  
  <p>Jest is used for unit test</p>
  
  <p>This is the Nest JS Filter code that capture all exception.</p>
  
  <pre class="lang-js prettyprint-override"><code>
  @Catch()
  export class AllExceptionsFilter implements ExceptionFilter {
    constructor(private logger: AppLoggerService) {}
  
    catch(exception: any, host: ArgumentsHost) {
      const ctx = host.switchToHttp();
      const response = ctx.getResponse();
      const request = ctx.getRequest();
  
      const message = {
        Title: exception.name,
        Type: 'Error',
        Detail: exception.message,
        Status: 'Status',
        Extension: '',
      };
      this.logger.error(message, '');
  
      const status =
        exception instanceof HttpException
          ? exception.getStatus()
          : HttpStatus.INTERNAL_SERVER_ERROR;
  
      response.status(status).send({
        statusCode: status,
        timestamp: new Date().toISOString(),
        path: request.url,
      });
    }
  }
  </code></pre>
  
  <p>My existing Unit test code is given below and need to write test on catch method.</p>
  
  <pre class="lang-js prettyprint-override"><code>describe('AllExceptionsFilter', () =&gt; {
      let allExceptionsFilter: AllExceptionsFilter;
      let appLoggerService: AppLoggerService;
  
      beforeEach(async () =&gt; {
          const loggerOptions = { appPath: process.cwd() }
          const module: TestingModule = await Test.createTestingModule({
              providers: [AllExceptionsFilter,
                  {
                      provide: AppLoggerService,
                      useValue: new AppLoggerService(loggerOptions, 'AllExceptionsFilter'),
                  },
              ],
          }).compile();
          allExceptionsFilter = module.get&lt;AllExceptionsFilter&gt;(AllExceptionsFilter);
      });
  
      it('should be defined', () =&gt; {
          expect(allExceptionsFilter).toBeDefined();
      });
  });
  
  </code></pre>
  
  <p>Test coverage of unit test should be 100%.</p>