axios-mock-adapter icon indicating copy to clipboard operation
axios-mock-adapter copied to clipboard

onGet and other methods is not defined

Open Shub1nk opened this issue 2 years ago • 11 comments

I tried to update axios to 1.2.4 in my project three months ago. But it failed.

When I launched Jest, I got one of these errors: onGet/onPost/reset is not defined or Error: connect ECONNREFUSED 127.0.0.1:80

I found some discussions, where was written that metod getAdapter is not public in the new version of axios.

https://github.com/ctimmerm/axios-mock-adapter/issues/355)](https://github.com/ctimmerm/axios-mock-adapter/issues/355

https://github.com/axios/axios/issues/5474)](https://github.com/axios/axios/issues/5474

Method getAdapter was made public in axios 1.5.0. In the lastest version of axios-mock-adapter version of axios is 0.27.2.

Do I understand correctly that this library can't work with projects, which have axios version higher than 0.27.2?

If it's true, do you plan to fix this problem?

Or am I doing something incorrectrly?

My project dependecies:

"jest": "26.5.0",
"axios": "1.5.0",
"axios-mock-adapter": "1.21.5"

My test example:

import axios from 'axios';
import MockAdapter from 'axios-mock-adapter';

const http = axios.create({
    baseURL: `${process.ENV.SERVICE_API}`,
    headers: {
        'Content-Type': 'application/json',
    },
});

describe('fetchAssetTypes', () => {
    beforeAll(() => {
        mock = new MockAdapter(http);
    });
    afterAll(() => {
        mock.reset();
    });

    it('success', async () => {
        mock.onGet(/\/asset-types.*/).reply(200, mockTags);

        const result = await fetchAssetTypes({ codes: 'AP,AO' });

        expect(result).toEqual(mockTags);
    });
});

I have this error:

  TypeError: mock.onGet is not a function

      16 |     beforeAll(() => {
      17 |         mock = new MockAdapter(http);
    > 18 |         mock.onGet(/\/instruments.*/).reply(200, mockData);
         |              ^
      19 |         mock.onGet(/\/asset-types.*/).reply(200, mockTags);
      20 |     });
      21 |

Running coverage on untested files...node:internal/process/promises:246
          triggerUncaughtException(err, true /* fromPromise */);
          ^

[UnhandledPromiseRejection: This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason "Error: connect ECONNREFUSED 127.0.0.1:80".] {
  code: 'ERR_UNHANDLED_REJECTION'
}

Shub1nk avatar Sep 05 '23 07:09 Shub1nk

Facing same issue. Does anyone had that and fixed it or do I need to replace library for mocking axios?

KonradFak avatar Sep 11 '23 07:09 KonradFak

I found out when I run mock in Storybook then all work. I made example with mocking inside this library and this example work too.

But, when I run Jest when I use axios-mock-adapter inside tests then new MockAdapter begin to return Promise and I get error mock.onGet is not a function.

I don't understand what is going on.

Shub1nk avatar Sep 13 '23 15:09 Shub1nk

Must be Jest specific. I have axios 1.5 working with axios-mock-adapter

marcbachmann avatar Sep 14 '23 11:09 marcbachmann

@marcbachmann Can you share your Jest config?

I have next settings in Jest for axios:

transformIgnorePatterns: ['/node_modules/(?!axios)'],
    moduleNameMapper: {
        axios: '<rootDir>/node_modules/axios/dist/node/axios.cjs',
    },

People from other releases write that jest, axios and axios-mock-adapter work for them with these settings. For some reason it doesn't work for me

Shub1nk avatar Sep 14 '23 14:09 Shub1nk

sorry, not using jest. that's why it must be jest specific 😅

marcbachmann avatar Sep 14 '23 15:09 marcbachmann

it works with axios 0.27.2. When I was updated axios to 1.5 it broke

Shub1nk avatar Sep 14 '23 16:09 Shub1nk

I've manage to fix it in my case by bumping versions of jest and ts-jest. My current versions are:

  • axios 1.5.0
  • axios-mock-adapter 1.21.5
  • jest 29.7.0
  • ts-jest 29.1.1

Thanks @marcbachmann for pointing out the right direction 😄

KonradFak avatar Sep 15 '23 09:09 KonradFak

I created test repo with example https://github.com/Shub1nk/test-jest-and-axios-mock-adapter

I use jest@29, [email protected] and [email protected] and it work. But if I enable these options in jest's config, I will get error that mock.onGet is not function (mock -> Promise) again.

// ATTENTION: Test with axios mock fails if I enable these options
transformIgnorePatterns: ['/node_modules/(?!axios)'],
moduleNameMapper: {
axios: '<rootDir>/node_modules/axios/dist/node/axios.cjs',
 },

Shub1nk avatar Sep 25 '23 08:09 Shub1nk

Multiple libraries are affected due to axios, I tried with msw, nock and this one none of them is working properly [email protected]

richenyadav001 avatar Sep 25 '23 12:09 richenyadav001

Same issue with [email protected]

scosc avatar Oct 31 '23 20:10 scosc

Looks like changing moduleNameMapper from axios to ^axios$ makes it work:

  moduleNameMapper: {
    '^axios$': 'axios/dist/node/axios.cjs',
  }

mustaphaturhan avatar Dec 04 '23 13:12 mustaphaturhan