_axios. default.post.mockImplementationOnce не является функцией VuesJS


_axios. default.post.mockImplementationOnce не является функцией VuesJS

02.12.2020 06:31:52 Просмотров 67 Источник

Я пытаюсь проверить свой вызов API. Я использую:

  1. VueJS
  2. Шутка
  3. Аксиос

Я получил ошибку: "_axios. default.post.mockImplementationOnce не является функцией" , когда я запускаю этот тест:

import axios from 'axios'

let url = ''
let body = {}

jest.mock("axios", () => ({
  //__esModule: true,
  post: (_url, _body) => { 
    return new Promise((resolve) => {
      url = _url
      body = _body
      resolve(true)
    })
  }
}))

//axios.mockResolvedValue();

describe('getGameList', () => {
  test('Success: should return the game list of the user and update gameList in the store', async () => {
    
    const response = {
      data: [ 
        { id:1, name:"game_name1" },
        { id:2, name:"game_name2" }
      ]
    };

    //axios.post.mockResolvedValue(response);
    //OR
    axios.post.mockImplementationOnce(() => Promise.resolve(response));

    expect(url).toBe("api/game_list_of_user")
    expect(body).toStrictEqual({"user_id": 1})

  });

});

Есть какие-нибудь зацепки ?

Правка 1: следуя за помощью tmhao2005:

jest.mock("axios", () => ({
  post: jest.fn((_url, _body) => { 
      url = _url
      body = _body
      return Promise.resolve();
    }),
  create: jest.fn(function () {
      return this;
  })
}))

describe('getGameList', () => {
  test('Success: should return the game list of the user and update gameList in the store', async () => {
    
    const url = "api/game_list_of_user";
    const body = {
      "user_id": 1
    };   
    const response = {
      data: [ 
        { id:1, name:"game_name1" },
        { id:2, name:"game_name2" }
      ]
    };
    axios.post.mockResolvedValue(response); //OR axios.post.mockImplementationOnce(() => Promise.resolve(response));

    expect(url).toBe("api/game_list_of_user")
    expect(body).toStrictEqual({"user_id": 1})

    expect(axios.post).toHaveBeenCalledTimes(1);

  });

});

Но у меня все еще есть эта проблема: enter image description here

Похоже, мой мнимый Аксиос не называется. метод toHaveBeenCalledTimes-это правильный метод для вызова ?

У вопроса есть решение - Посмотреть?

Ответы - _axios. default.post.mockImplementationOnce не является функцией VuesJS / _axios.default.post.mockImplementationOnce is not a function VuesJS

tmhao2005

02.12.2020 07:03:18

Дело в том, что теперь вы издеваетесь над функцией post своей собственной функцией, которая не является типом jest.Mock, поэтому метод mockImplementationOnce не существует.

Другими словами, чтобы исправить это, вы могли бы либо:

  • вместо этого верните фиктивную функцию:
jest.mock("axios", () => ({
  post: jest.fn((_url, _body) => {
    url = _url;
    body = _body;    
    return Promise.resolve();
  })
}))

  • или если вы больше не заботитесь о url/body, вы просто издеваетесь над axios, ничего не реализуя:
jest.mock('axios')
Помочь в развитии проекта:
Закрыть X