我有一个Jest测试,它正在构建一个redux组件,该组件的一部分调用了许多sagas,而后者又调用了许多ajax函数。
其中一个ajax函数正在使用https://github.com/kineticdata/react-kinetic-core中的CoreApi组件,另一个是在本地函数中。
我已经在/ src / __ mocks__中模拟了这两个函数-调用了CoreApi的模拟。我为自己的函数提供的模拟不是,并且底层函数正在被调用。
我的测试:
import React from 'react';
import {fireEvent, cleanup, waitForDomChange, wait} from '@testing-library/react'
import {renderWithRedux} from '../../../../helpers/testSetup'
import "@testing-library/jest-dom/extend-expect"
import {Container} from '../container'
// test setup
afterEach(cleanup)
beforeEach(() => {
// fetch.resetMocks();
});
// consts
const match = {
params: {
id: "123"
}
}
// tests
describe('Timeline Container', () => {
it('Rendering timeline', async () => {
const {getAllByText,getByTestId,findByTestId,store} = renderWithRedux(<Container match={match} />)
expect(getAllByText("Loading request")[0]).toBeVisible()
// 2. Act
// 3. Assert
})
})
我对CoreApi的模拟(在Container组件传奇中调用)
const CoreAPI = {}
function fetchSpace() {
console.log("in space mock")
return (
{
"space": {
"attributes": [{"a":"b"}]
}
}
)
}
CoreAPI.fetchSpace = fetchSpace
export { CoreAPI }
我的本地函数的模拟:
const getHeader = () => {
console.log("in the mock header")
return(
JSON.stringify({
"request": {
"title": "TEST"
},
"error": false,
"errorLevel": 0
})
)
}
export const JspAccess = {
getHeader
}
我的真实函数如下:
const getHeader = (id) => {
console.log("doing fetch call for "+id)
return fetch("/api/?callback=lookup.json&id="+id",
{
method: 'GET',
credentials: 'include',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
}
}
)
}
export const JspAccess = {
getHeader
}
但是我的Jest输出显示的是来自真实函数的console.logs而不是模拟,而是对我的CoreApi调用使用了模拟:
PASS src/components/app/__tests__/Container.test.js
● Console
console.log src/lib/api/jspAccess.js:2
doing fetch call for 123
console.log src/__mocks__/react-kinetic-core.js:8
in space mock
我不知道我的模拟物是否在同一个地方,为什么一个人被捡起而另一个人不被捡起。有什么想法吗?!