我有一个删除记录的非常简单的 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
我想要的只是测试它是否到达了成功的通知,因为我想在另一个测试中测试失败的通知。我只是不明白我错过了什么。我已经经历了很多其他线程,但我似乎找不到解决方案。
你需要模拟
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');
});
试试这个方法看看是否有效:
export function notify(arg1, arg2){
}
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');
});
希望这对你有用。