Jest 测试:如何测试在 axios 调用中使用特定参数调用函数

问题描述 投票:0回答:2

我有一个删除记录的非常简单的 axios 调用。如果成功,它将调用带有特定参数的通知函数(自定义函数)。我实际上并不希望通知运行,但我想检查的是当它进入 then 时,它是用那些特定的参数调用的。

export function deleteRecord(id) {
    return axios
        .delete(`/${id}`) 
        .then(() => notify('success', 'Delete successful'))
        .catch(() => notify('error', 'Delete failed'));
}

我一直在探索 jest.fn()、spyOn 和 toHaveBeenCalledWith,但我被卡住了。这就是我结束的地方:

it('deleteRecord success', async () => {
        const id = 1;
        const notify = jest.fn()

        axios.delete.mockResolvedValueOnce({ status: 200 });
        await deleteRecord(id);
        expect(notify).toHaveBeenCalledWith('success', 'Delete successful');
        
    });

这就是我得到的错误。

expect(jest.fn()).toHaveBeenCalledWith(...expected)

    Expected: "success", "Rolled back"

    Number of calls: 0

我想要的只是测试它是否到达了成功的通知,因为我想在另一个测试中测试失败的通知。我只是不明白我错过了什么。我已经经历了很多其他线程,但我似乎找不到解决方案。

javascript async-await axios jestjs try-catch
2个回答
1
投票

你需要模拟

notify
功能。

import { deleteRecord } from './deleteRecord';

jest.mock('./notify', () => jest.fn());

it('deleteRecord success', async () => {
  const id = 1;
  const notify = require('./notify');

  axios.delete.mockResolvedValueOnce({ status: 200 });
  await deleteRecord(id);
  expect(notify).toHaveBeenCalledWith('success', 'Delete successful');
});

0
投票

试试这个方法看看是否有效:

  1. 在你的测试文件夹中创建另一个名为“__mocks__”的文件夹。(我相信那个笑话知道那个文件夹中的任何东西都是模拟数据)
  2. 在“__mocks__”文件夹下,制作一个名为“notify”的js文件,里面有notify函数。而且由于您不关心它的作用,因此该功能可以为空。
         export function notify(arg1, arg2){
    }
  1. 现在你的测试应该是这样的:
import {notify} from './notify';

jest.mock('./notify'); //<-- this is pointing to your actual js file where your real notify function is.

it('deleteRecord success', async () => {
        const id = 1;

        axios.delete.mockResolvedValueOnce({ status: 200 });
        await deleteRecord(id);
        expect(notify).toHaveBeenCalledWith('success', 'Delete successful');
        
    });

希望这对你有用。

© www.soinside.com 2019 - 2024. All rights reserved.