Jestjs 如何使用jest.fn()在jest中使用typescript模拟函数

Jestjs 如何使用jest.fn()在jest中使用typescript模拟函数,jestjs,Jestjs,我试图模拟一个名为callApi的函数。我使用jest.fn(),但收到错误消息: 函数callApi(方法:string,url:string,路径:string,数据?:any):Promise> 无法分配给“callApi”,因为它是只读属性。ts(2540) 我试着按照上面的例子来做 我的代码有什么问题?为什么我会收到错误消息。 callApi的一部分是 从“axios”导入axios 测试如下: import {runSaga} from 'redux-saga'; import *

我试图模拟一个名为callApi的函数。我使用jest.fn(),但收到错误消息:

函数callApi(方法:string,url:string,路径:string,数据?:any):Promise> 无法分配给“callApi”,因为它是只读属性。ts(2540)

我试着按照上面的例子来做

我的代码有什么问题?为什么我会收到错误消息。
callApi的一部分是 从“axios”导入axios

测试如下:

import {runSaga} from 'redux-saga';
import * as api from '../Utilities/api'
import { getPaymentsError, getPaymentsSuccess, IPaymentsAction } from './actions';
import handleFetch from './sagas'


test('should test fetch payments success',async() =>{
const dispatchedActions = [{}];
const mockedPayments = [{
    details: {
    amount: "10000",
    date: new Date(),
    id: 5
  },
  id: 5,
  month: "Feb 2003",
  userID: 3
}];


 api.callApi = jest.fn(() => Promise.resolve(mockedPayments));<----------error here



const fakeStore = {
    dispatch:(action:IPaymentsAction) =>dispatchedActions.push(action)
}
await runSaga(fakeStore,handleFetch).done;
expect(api.callApi.mock.calls.length).toBe(1);
expect(dispatchedActions).toContainEqual(getPaymentsSuccess(mockedPayments));
})
从'redux saga'导入{runSaga};
将*作为api从“../Utilities/api”导入
从“/actions”导入{getPaymentsError,GetPaymentsAccess,IPaymentsAction};
从“/sagas”导入handleFetch
test('should test fetch payments success',async()=>{
const dispatchedActions=[{}];
const mockedPayments=[{
详情:{
金额:“10000”,
日期:新日期(),
身份证号码:5
},
id:5,
月份:“2003年2月”,
用户ID:3
}];
api.callApi=jest.fn(()=>Promise.resolve(mockedPayments));dispatchedActions.push(action)
}
等待runSaga(fakeStore,handleFetch)。完成;
expect(api.callApi.mock.calls.length).toBe(1);
expect(dispatchedActions).toContainEqual(GetPaymentsAccess(mockedPayments));
})

分配给一个
jest.fn()
不适合键入类型脚本

改用
jest.spyOn

test('should test fetch payments success',异步(完成)=>{
const dispatchedActions=[{}];
const mockedPayments=[{
详情:{
金额:“10000”,
日期:新日期(),
身份证号码:5
},
id:5,
月份:“2003年2月”,
用户ID:3
}];
constspy=jest.spyOn(api,'callApi');
spy.mockImplementation(()=>Promise.resolve(mockedPayments));
康斯特法克斯托={
调度:(操作:IPaymentsAction)=>dispatchedActions.push(操作)
}
等待runSaga(fakeStore,handleFetch);完成();
expect(spy.mock.calls.length).toBe(1);
expect(dispatchedActions).toContainEqual(GetPaymentsAccess(mockedPayments));
})

分配给一个
jest.fn()
不适合键入类型脚本

改用
jest.spyOn

test('should test fetch payments success',异步(完成)=>{
const dispatchedActions=[{}];
const mockedPayments=[{
详情:{
金额:“10000”,
日期:新日期(),
身份证号码:5
},
id:5,
月份:“2003年2月”,
用户ID:3
}];
constspy=jest.spyOn(api,'callApi');
spy.mockImplementation(()=>Promise.resolve(mockedPayments));
康斯特法克斯托={
调度:(操作:IPaymentsAction)=>dispatchedActions.push(操作)
}
等待runSaga(fakeStore,handleFetch);完成();
expect(spy.mock.calls.length).toBe(1);
expect(dispatchedActions).toContainEqual(GetPaymentsAccess(mockedPayments));
})

我遇到错误超时-在jasmine.DEFAULT\u Timeout\u INTERVAL指定的超时内未调用异步回调。在pTimeout(node_modules/jest-jasmine2/build/queueRunner.js:53:21)Timeout.callback[as_onTimeout](node_modules/jsdom/lib/jsdom/browser/Window.js:523:19)@jupitersailormoon这是一个单独的问题(听起来你的传奇故事可能没有解决)如果需要帮助,应该在一个新问题中解决。我添加了done函数。感谢并感谢@brian住在户外经过几个小时的搜索,这个答案让我免于把键盘从桌子上摔下来。非常感谢。我遇到了超时错误-在jasmine.DEFAULT\u Timeout\u INTERVAL指定的超时内未调用异步回调。在pTimeout(node_modules/jest-jasmine2/build/queueRunner.js:53:21)Timeout.callback[as_onTimeout](node_modules/jsdom/lib/jsdom/browser/Window.js:523:19)@jupitersailormoon这是一个单独的问题(听起来你的传奇故事可能没有解决)如果需要帮助,应该在一个新问题中解决。我添加了done函数。感谢并感谢@brian住在户外经过几个小时的搜索,这个答案让我免于把键盘从桌子上摔下来。非常感谢。
import {runSaga} from 'redux-saga';
import * as api from '../Utilities/api'
import { getPaymentsError, getPaymentsSuccess, IPaymentsAction } from './actions';
import handleFetch from './sagas'


test('should test fetch payments success',async() =>{
const dispatchedActions = [{}];
const mockedPayments = [{
    details: {
    amount: "10000",
    date: new Date(),
    id: 5
  },
  id: 5,
  month: "Feb 2003",
  userID: 3
}];


 api.callApi = jest.fn(() => Promise.resolve(mockedPayments));<----------error here



const fakeStore = {
    dispatch:(action:IPaymentsAction) =>dispatchedActions.push(action)
}
await runSaga(fakeStore,handleFetch).done;
expect(api.callApi.mock.calls.length).toBe(1);
expect(dispatchedActions).toContainEqual(getPaymentsSuccess(mockedPayments));
})