下面是我的代码,它运行良好
const axios = require('axios')
const axiosCookieJarSupport = require('axios-cookiejar-support').default
const tough = require('tough-cookie')
axiosCookieJarSupport(axios)
async function getData() {
let cookieJar = new tough.CookieJar()
try {
await axios.post({ jar: cookieJar, withCredentials: true, url: '/user' })
const data = await axios.post({ jar: cookieJar, withCredentials: true, url: '/token' })
return data
} catch (error) {
console.error(error)
return error
}
}
module.exports.getData = getData下面是我的Jest测试:
const axios = require('axios');
const getData = require('../getData');
jest.mock("axios");
test('test axios and return data', async () => {
axios.post.mockImplementation((options) => {
switch (options.url) {
case '/user':
return Promise.resolve({ user: 'John' });
break;
case ORMB_URL:
return Promise.resolve({ token: 'testtoken' });
break;
default:
return Promise.reject(new Error('not found'))
}
});
const data = await getData.getData();
console.log(data);
})现在,Jest失败了:
axios.post.mockImplementation((options) => {有错误:
TypeError: axios.post.mockImplementation is not a function如果我在源代码中注释这一行,它看起来是有效的:
axiosCookieJarSupport(axios)但这就是我现在需要的..所有其他呼叫都将失败,并显示此行注释..我做错了什么?
发布于 2021-02-18 16:56:08
axios.post = jest.fn().mockImplementation((options) => {
switch (options.url) {
case '/user':
return Promise.resolve({ user: 'John' });
break;
case ORMB_URL:
return Promise.resolve({ token: 'testtoken' });
break;
default:
return Promise.reject(new Error('not found'))
}
});发布于 2021-05-31 09:44:04
axiosCookieJarSupport(axios)通过在模拟默认导出上的所有函数的jest之后创建一个新的axios实例来改变参数axios。这本质上是重写了jest模拟函数。您可以模拟axios-cookiejar-support的实现以返回传递的实例,也可以创建一个新的axios实例并将其传递给axiosCookieJar支持,以避免副作用。
https://stackoverflow.com/questions/61782427
复制相似问题