首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用cookieJarSupport和jest模拟axios

如何用cookieJarSupport和jest模拟axios
EN

Stack Overflow用户
提问于 2020-05-14 02:42:35
回答 2查看 245关注 0票数 1

下面是我的代码,它运行良好

代码语言:javascript
运行
复制
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测试:

代码语言:javascript
运行
复制
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失败了:

代码语言:javascript
运行
复制
axios.post.mockImplementation((options) => {

有错误:

代码语言:javascript
运行
复制
TypeError: axios.post.mockImplementation is not a function

如果我在源代码中注释这一行,它看起来是有效的:

代码语言:javascript
运行
复制
axiosCookieJarSupport(axios)

但这就是我现在需要的..所有其他呼叫都将失败,并显示此行注释..我做错了什么?

EN

回答 2

Stack Overflow用户

发布于 2021-02-18 16:56:08

代码语言:javascript
运行
复制
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'))
    }
  });
票数 0
EN

Stack Overflow用户

发布于 2021-05-31 09:44:04

axiosCookieJarSupport(axios)通过在模拟默认导出上的所有函数的jest之后创建一个新的axios实例来改变参数axios。这本质上是重写了jest模拟函数。您可以模拟axios-cookiejar-support的实现以返回传递的实例,也可以创建一个新的axios实例并将其传递给axiosCookieJar支持,以避免副作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61782427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档