Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs Jest和Ezyme通过了个人测试,但未能运行所有测试_Reactjs_Jestjs_Enzyme - Fatal编程技术网

Reactjs Jest和Ezyme通过了个人测试,但未能运行所有测试

Reactjs Jest和Ezyme通过了个人测试,但未能运行所有测试,reactjs,jestjs,enzyme,Reactjs,Jestjs,Enzyme,我做了一些测试来删除国家、州和城市。当我单独运行它们时,它们都通过了,但是如果我同时运行它们,最后的测试失败了。它具有上一个测试的挂载(和dom)!i、 e.expect(wrapper.text().includes('1st State')).toBe(true)失败,因为我已将其从上一个测试中删除,快照将确认它!有人知道为什么吗 更详细地说,我有一个树结构,如下所示,如果我删除该国家,该国家下的所有州和城市都将被删除,如果我删除该国家下的所有城市,依此类推 -1st Country(tes

我做了一些测试来删除国家、州和城市。当我单独运行它们时,它们都通过了,但是如果我同时运行它们,最后的测试失败了。它具有上一个测试的挂载(和dom)!i、 e.
expect(wrapper.text().includes('1st State')).toBe(true)失败,因为我已将其从上一个测试中删除,快照将确认它!有人知道为什么吗

更详细地说,我有一个树结构,如下所示,如果我删除该国家,该国家下的所有州和城市都将被删除,如果我删除该国家下的所有城市,依此类推

-1st Country(testid=1)
-- 1st State(testid=2)
--- 1st City(testid=3)
--- 2nd City(testid=4)
-- 2nd State(testid=5)
--- 3rd City(testid=6)
导入。。。。
mock('../apiWrappers/fetchData');
描述(‘使用酶渲染’,()=>{
在每个之前(()=>{
开玩笑。clearAllMocks();
fetchData.mockReset();
fetchData.mockReturnValue(Promise.resolve(data));
});
测试('一旦加载并删除第一个国家/地区',异步()=>{
const wrapper=mount();
等待waitForExpect(()=>{
expect(fetchData).toHaveBeenCalledTimes(1);
wrapper.update();
});
wrapper.find('[data testid=“removeDataRow-1”]')。位于(0)。模拟('click');
expect(wrapper.text().includes('1st Country')).toBe(false);
expect(wrapper.text().includes('second Country')).toBe(true);
expect(toJson(wrapper)).toMatchSnapshot();
});
test('一旦加载并删除第一个状态',async()=>{
const wrapper=mount();
等待waitForExpect(()=>{
expect(fetchData).toHaveBeenCalledTimes(1);
wrapper.update();
});
wrapper.find('[data testid=“removeDataRow-2”]')。位于(0)。模拟('click');
expect(wrapper.text().includes('1st Country')).toBe(true);
expect(wrapper.text().includes('1st State')).toBe(false);
expect(wrapper.text().includes('1st City')).toBe(false);
expect(wrapper.text().includes('second City')).toBe(false);
expect(wrapper.text().includes('2nd State')).toBe(true);
});
测试('一旦加载并删除第一个城市',异步()=>{
const wrapper=mount();
等待waitForExpect(()=>{
expect(fetchData).toHaveBeenCalledTimes(1);
wrapper.update();
});
expect(wrapper.text().includes('1st State')).toBe(true);
wrapper.find('[data testid=“removeDataRow-3”]')。位于(0)。模拟('click');
expect(wrapper.text().includes('1st Country')).toBe(true);
expect(wrapper.text().includes('1st State')).toBe(true);
expect(wrapper.text().includes('1st City')).toBe(false);
expect(wrapper.text().includes('second City')).toBe(true);
});

});
关于如何从主状态删除这些值,我没有足够的上下文,但我认为在你的应用程序中,你在第二次测试中改变了
数据
变量的值,而在第三次测试中得到了错误的值。您可以确认在每个测试中放置
console.log(data)
,以查看差异(每个测试的差异应该相等)。如果这是你的问题,你不应该在你的应用程序中对其进行变异,一个变通方法将在每次
之前在你的
中创建一个新的
数据

使用部分代码变异
数据的工作示例:

在不进行变异的情况下,创建新的
数据

我有没有办法在每次
之前的
中强制执行它。我已经包括了以下内容<代码>jest.clearAllMocks();fetchData.mockReset();fetchData.mockReturnValue(Promise.resolve(data))我希望我的测试彼此独立。我的应用程序是可变的,一旦他们删除它。他们再也无法添加它了。我已将其添加到问题中。谢谢我在
beforeach
中做了一个更改,作为
fetchData.mockReturnValue(Promise.resolve([…data])但每次我都会得到上一次测试的数据!是的,你可以使用像lodash deepClone这样的库。我认为你正在改变你的主要目标。请记住,
[…data]
并不是完全创建一个新列表,它的子项在内存中仍然是相同的。我用一个变异和不变异的工作示例编辑了答案。谢谢您的评论。我确实对它进行了变异,因为这对我的应用程序并不重要,我不知道其中的区别:D:((但是,即使我没有进行变异,测试仍然失败!让我创建一个拉请求并将其添加到这里。它说
方法“模拟”应该在
包装器的1个节点上运行。查找('[data testid=“removeDataRow-3”])。在(0).simulate('click');
我对酶很陌生,如果我在那里做错了什么,请告诉我。