Javascript Jest模拟函数不注册调用

Javascript Jest模拟函数不注册调用,javascript,reactjs,jestjs,axios,Javascript,Reactjs,Jestjs,Axios,我有一个react组件,其中有一个方法请求我的api。 出于测试目的,我模拟了该模块。 使用get识别第一个呼叫,但不识别 第二个是post,但它是在get语句之前声明的。我可以 记录axios.post.mock.result在我的react组件中的价值承诺。 在我的测试中它是空的。 我将问题隔离如下: 我的组件方法 从“axios”导入axios; 异步getData(数据){ let response=wait axios.get('/api',, { 参数:{ 数据 } }); 如果(

我有一个react组件,其中有一个方法请求我的api。 出于测试目的,我模拟了该模块。 使用get识别第一个呼叫,但不识别 第二个是post,但它是在get语句之前声明的。我可以 记录axios.post.mock.result在我的react组件中的价值承诺。 在我的测试中它是空的。 我将问题隔离如下:

我的组件方法

从“axios”导入axios;
异步getData(数据){
let response=wait axios.get('/api',,
{
参数:{
数据
}
});
如果(response.status==200){
response=wait axios.post(“/api”,
答复.数据
);
如果(response.status==200){
this.setState({data:true});
}
}
}
render(){
如果(!this.state.data){
返回(
this.getData(this.state.input)}
>单击我)
}否则{
返回(成功

);
}
react测试库主要用于blackbox功能测试,不适合测试实现。一种常见的测试策略是模拟单击并断言DOM:

const { getByText } = render(<App />);
fireEvent.click(app.getByText('Click me'));
await waitForElement(() => getByText('Success'));

react测试库主要用于blackbox功能测试,不适合测试实现。一种常见的测试策略是模拟单击并断言DOM:

const { getByText } = render(<App />);
fireEvent.click(app.getByText('Click me'));
await waitForElement(() => getByText('Success'));

异步调用axios.post。你没有承诺要等待它。react测试库不适合以任何方式进行实现测试。如果你想这样做,使用酶。在react测试库中,您只需模拟一次单击并断言其对DOM的影响。您是指then/catch和链接。我改为使用wait,以便稍后检查状态的值。请在这里解释错误。我检查了expect是否在post调用之前,但它不是(异步的)。还有文件说react测试库试图取代酶。我不认为文件中有这样的说法。它们是正交的。react测试库进行黑盒功能测试。在这个解决方案“这个库是酶的替代品”下,也许我误解了上下文。酶可以比DOM更深,但这并不是必需的。作者对测试方法持不同意见。请注意,它强调了它们之间的区别,虽然您可以使用Ezyme本身遵循这些指导原则,但由于Ezyme提供了所有额外的实用程序(有助于测试实现细节的实用程序),因此执行这些指导原则更加困难。稍后我将发布一个答案。axios.post是异步调用的。你没有承诺要等待它。react测试库不适合以任何方式进行实现测试。如果你想这样做,使用酶。在react测试库中,您只需模拟一次单击并断言其对DOM的影响。您是指then/catch和链接。我改为使用wait,以便稍后检查状态的值。请在这里解释错误。我检查了expect是否在post调用之前,但它不是(异步的)。还有文件说react测试库试图取代酶。我不认为文件中有这样的说法。它们是正交的。react测试库进行黑盒功能测试。在这个解决方案“这个库是酶的替代品”下,也许我误解了上下文。酶可以比DOM更深,但这并不是必需的。作者对测试方法持不同意见。请注意,它强调了它们之间的区别,虽然您可以使用Ezyme本身遵循这些指导原则,但由于Ezyme提供了所有额外的实用程序(有助于测试实现细节的实用程序),因此执行这些指导原则更加困难。我很快会给你回复的,不客气。你说的“不等待”是什么意思?请指定您正在尝试的代码。抱歉,术语含糊不清。我是说在使用waitForElement之前。DOM发生了变化,这意味着post响应的状态为200。我在expect(axios.post)之前查询了成功更改的元素,但在我的测试文件中仍然没有调用post。在我的组件axios.post.mock.results[0]中,value有一个承诺,如果我试图在那里等待它,它就会被拒绝。不客气。你说的“不等待”是什么意思?请指定您正在尝试的代码。抱歉,术语含糊不清。我是说在使用waitForElement之前。DOM发生了变化,这意味着post响应的状态为200。我在expect(axios.post)之前查询了成功更改的元素,但在我的测试文件中仍然没有调用post。在我的组件axios.post.mock.results[0]中,value有一个承诺,如果我试图在那里等待它,它就会被拒绝。