我有一个API类:
import axios from 'axios';
export default class API {
constructor(axiosConfig) {
this.instance = axios.create({ ...axiosConfig });
}
async getSomeData(params) => {
let result = await this.instance.get('some_data_endpoint', { params: params });
return result.data;
}
}
以及一个组件,它首先构造API类,然后调用useEffect挂钩中提供的终结点:
import React, { useEffect, useState } from "react";
import { API } from './API';
import { axiosConfig } from './constants'
const SomeComponent = () => {
const apiInstance = new API(axiosConfig);
const [someData, setSomeData] = useState([]);
useEffect(() => {
apiInstance.getSomeData({ some_param: 'some_param_value' }).then(data => {
setSomeData(data);
})
}, [])
}
下面是Jest 测试:
import "@testing-library/jest-dom";
import { render } from "@testing-library/react";
import SomeComponent from './SomeComponent'
import API from './API';
jest.mock('./API', () => {
return jest.fn().mockImplementation(() => {
return {
getSomeData: () => {
return []
}
}
})
});
describe('SomeComponent', () => {
beforeEach(() => {
render(<SomeComponent />);
});
it('does some work', () => {
// do assertions
})
})
我面临的问题是API会被模拟,但当我try 运行上面的测试时,模拟实现中的方法并没有在模拟中定义.这会导致API.getSomeData is not a function
错误.
希望寻找任何我可能遗漏的关于Jest 嘲弄如何在上面的代码中工作的东西.