【发布时间】:2020-09-04 08:01:00
【问题描述】:
我正在监视一个方法,在这种情况下:axios.post。我想解决它并继续运行脚本,因为在then 块中,它必须运行另一个方法。我目前解决它的方法是使用jest.spyOn(axios, 'post').mockImplementation(() => Promise.resolve( ));。正如它所说,这是一个模拟实现,并将完全放弃实际代码。我想要的是一种解决此调用的方法(通过returnValue 或其他方式)并继续执行实际代码。我记得Jasmin 有类似的效果。
编辑:
我似乎 axios promise.resolve 实际上正在推进它。问题更多在于我试图模拟 helpers.showResponseMessage 并且 Jest 一直坚持不调用它(即使模拟中的 console.log 被调用)。有什么想法吗?
联系方式(我正在尝试正确解决 Axios 呼叫)
const recommendationHandler = (event) => {
event.preventDefault();
axios.post('/contact.json', extractData(config.addMessage))
.then(() => {
showResponseMessage(`Din besked er sendt.`, initialState, false, setConfig, 5000);
})
.catch(() => {
showResponseMessage(`Der opstod en fejl ved sendning. Prøv igen senere.`, {}, true, setConfig, 10000);
});
}
测试文件
import React from 'react';
import { configure, shallow, mount, render } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import axios from '../../axios-instances/axios-firebase'
import * as helpers from '../../utility/Helpers/Helpers'
import Contact from './Contact';
configure({ adapter: new Adapter() });
describe('<Contact />', () => {
it.only('should POST data to server if necessary payload is included', async () => {
jest.spyOn(axios, 'post').mockImplementation(() => Promise.resolve( ));
const wrapper = mount(<Contact />);
jest.spyOn(helpers, 'showResponseMessage').mockImplementationOnce(_ => console.log('test'));
wrapper.find('form').simulate('submit', {
preventDefault: () => { }
});
expect(axios.post).toHaveBeenCalledTimes(1);
expect(helpers.showResponseMessage).toHaveBeenCalled();
expect(wrapper.find('#responseMessage')).toHaveLength(1);
});
});
【问题讨论】: