Giter Club home page Giter Club logo

Comments (4)

severinh avatar severinh commented on June 22, 2024 1

Regarding alternatives, when extending and defining a mock definition in a test, for example, you can use the following function that automatically generates the key.

Thanks for your reply!

The get*Key methods could be used, but there a number of downsides to that:

  1. The method actually returns an array, where only the first element is the URL. So you would need to do something like http.post(getListPetsKey(123)[0], async () => new HttpResponse('', { status: 500 }))
  2. You still have to repeat the HTTP verb (e.g. http.post). That's a possible source of errors, since the writer of the test has to manually make sure to pick the correct HTTP verb - even though orval actually knows the right verb.
  3. It forces you to actually pick values for the path parameters, such as getListPetsKey(paramA, paramB). That's inconsistent with the Orval-generated handlers, which just uses a placeholder such as :paramA, :paramB in the URL given to MSW.

Overall, I'm afraid this would not be a good developer experience.

So for now, my team will keep hard-coding URLs in tests. And I would be delighted if in the future, Orval will provide support for more flexible handler overrides.

from orval.

soartec-lab avatar soartec-lab commented on June 22, 2024

@severinh

Thank you for made this issue.

Simulating HTTP errors in tests

Regarding alternatives, when extending and defining a mock definition in a test, for example, you can use the following function that automatically generates the key.

https://github.com/anymaniax/orval/blob/master/samples/react-app-with-swr/src/api/endpoints/petstoreFromFileSpecWithTransformer.ts#L35


const key = getListPetsKey()

server.use(
  http.post(key, async () => new HttpResponse('', { status: 500 }))
);

from orval.

soartec-lab avatar soartec-lab commented on June 22, 2024

Yes, this is an alternative method, but it is consistent and functional with the URL defined in OpenAPI, so please consider it as one method.

const key, _ = getListPetsKey()

from orval.

AffeJonsson avatar AffeJonsson commented on June 22, 2024

If you want to test different response types, you can use the generateEachHttpStatus config option in output.mock:

output: {
  mock: {
    type: "msw",
    generateEachHttpStatus: true
  }
}

With a specification that have two responses of a ListPets endpoint, one 200 and one 500, the following mock is generated:

export const getListPetsMockHandler200 = (
  overrideResponse?:
    | Pets
    | ((info: Parameters<Parameters<typeof http.get>[1]>[0]) => Pets),
) => {
  return http.get('*/v:version/pets', async (info) => {
    await delay(1000);
    return new HttpResponse(
      JSON.stringify(
        overrideResponse !== undefined
          ? typeof overrideResponse === 'function'
            ? overrideResponse(info)
            : overrideResponse
          : getListPetsResponseMock200(),
      ),
      {
        status: 200,
        headers: {
          'Content-Type': 'application/json',
        },
      },
    );
  });
};

export const getListPetsMockHandler500 = (
  overrideResponse?:
    | Error
    | ((info: Parameters<Parameters<typeof http.get>[1]>[0]) => Error),
) => {
  return http.get('*/v:version/pets', async (info) => {
    await delay(1000);
    return new HttpResponse(
      JSON.stringify(
        overrideResponse !== undefined
          ? typeof overrideResponse === 'function'
            ? overrideResponse(info)
            : overrideResponse
          : getListPetsResponseMock500(),
      ),
      {
        status: 500,
        headers: {
          'Content-Type': 'application/json',
        },
      },
    );
  });
};

And you no longer need to overwrite the whole mock handler.

from orval.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.