0

Added in a pre-requisite for the endpoint to validate that the client information being passed is legit or it will throw an error. The clientProfileValidation.clientProfileValidation method receives the request object and returns a profile object that gets attached to the request.pre.

When trying to update my route unit test, I get the below error.

Unhandled rejection occurred. One of your test may have failed silently.
TypeError: Cannot read properties of undefined (reading 'routes')

This is a nodejs api using HAPI framework. When I remove the pre from the route, the test passes. I attempted to mock the clientProfileValidation method but its not working as expected.

Route

const drayageRampRecommendation = {
  method: 'POST',
  path: '/endpoint',
  handler: async (request, h) => {
    try {
      const resp = await rampHandler.rampRecommendation(request);

      return h.response(resp).code(201);
    } catch (error) {
      return handleError(error).toBoom();
    }
  },
  config: {
    pre: [
      {
        method: clientProfileValidation.clientProfileValidation,
        assign: 'profile'
      }
    ],
    payload: {
      allow: ['application/json', 'application/*+json']
    }
  }
};

Unit Test:

Using the Tape and Test Double Libraries for testing

test('drayage/recommend-ramps route: should return 201 when successfully processed', async (t) => {
  beforeEachRampRecommendation();

  const options = {
    method: 'POST',
    url: '/endpoint',
    payload: recommendRampFixture,
    headers: { authorization: 'Bearer 123' },
    auth: {
      credentials: { user: 'test', clientId: 'testClient' },
      strategy: 'default'
    }
  };

  const testProfile = {
    _id: 'testId',
    auth0ClientName: 'test client'
  };

  td.when(clientProfileValidation.clientProfileValidation(), {
    ignoreExtraArgs: true
  }).thenReturn(testProfile);

  td.when(recommendRampHandler.rampRecommendation(), {
    ignoreExtraArgs: true
  }).thenReturn('');

  const server = await buildServer(routes);
  const response = await server.inject(options);

  t.equal(response.statusCode, 201, 'Should return 201 status code');

  td.reset();
  t.end();
});
chris clifton
  • 133
  • 1
  • 13

0 Answers0