axios-mock-adapter
axios-mock-adapter copied to clipboard
onGet and other methods is not defined
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'
}
Facing same issue. Does anyone had that and fixed it or do I need to replace library for mocking axios?
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.
Must be Jest specific. I have axios 1.5 working with axios-mock-adapter
@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
sorry, not using jest. that's why it must be jest specific 😅
it works with axios 0.27.2. When I was updated axios to 1.5 it broke
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 😄
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',
},
Multiple libraries are affected due to axios, I tried with msw, nock and this one none of them is working properly [email protected]
Same issue with [email protected]
Looks like changing moduleNameMapper from axios to ^axios$ makes it work:
moduleNameMapper: {
'^axios$': 'axios/dist/node/axios.cjs',
}