Reactjs 嘲笑:警告:列表中的每个孩子都应该有一个唯一的;“关键”;道具
我编写了触发Reactjs 嘲笑:警告:列表中的每个孩子都应该有一个唯一的;“关键”;道具,reactjs,mocking,jestjs,Reactjs,Mocking,Jestjs,我编写了触发React警告的测试 警告:列表中的每个孩子都应该有一个唯一的“key”道具。 我知道为什么会有这个警告,但我需要测试这个案例。但我不想在运行测试时看到警告 我怎样才能编写一个隐藏消息的模拟,或者让我监视它,这样我就可以看到它在那里了 我正在使用React和Jest控制台记录警告消息。错误,因此您可以将控制台。错误替换为间谍,并检查是否调用了预期警告: import * as React from 'react'; import { shallow } from 'enzyme';
React
警告的测试
警告:列表中的每个孩子都应该有一个唯一的“key”道具。
我知道为什么会有这个警告,但我需要测试这个案例。但我不想在运行测试时看到警告
我怎样才能编写一个隐藏消息的模拟,或者让我监视它,这样我就可以看到它在那里了
我正在使用
React
和Jest
控制台记录警告消息。错误,因此您可以将控制台。错误
替换为间谍
,并检查是否调用了预期警告:
import * as React from 'react';
import { shallow } from 'enzyme';
const List = () => (
<ul>
{[1, 2, 3].map((val) => (<li>item {val}</li>))}
</ul>
);
describe('console.error check', () => {
let savedError;
beforeEach(() => {
savedError = console.error; // save the real console.error
console.error = jest.fn(); // replace it with a spy
});
afterEach(() => {
console.error = savedError; // restore the real console.error
});
it('should call console.error with the warning', () => {
shallow(<List />);
expect(console.error).toHaveBeenCalled(); // SUCCESS
expect(console.error.mock.calls[0][0].startsWith('Warning: Each child in a list should have a unique "key" prop.')).toBe(true); // SUCCESS
});
})
import*as React from'React';
从“酶”导入{shall};
常量列表=()=>(
{[1,2,3].map((val)=>(- 项{val}
)}
);
描述('console.error check',()=>{
让萨维德罗;
在每个之前(()=>{
savedError=console.error;//保存真正的console.error
console.error=jest.fn();//用间谍替换它
});
之后(()=>{
console.error=savedError;//还原真正的console.error
});
它('应该调用console.error并发出警告',()=>{
浅();
expect(console.error).tohavebeencall();//成功
expect(console.error.mock.calls[0][0].startsWith('警告:列表中的每个子级都应该有一个唯一的“key”prop.)).toBe(true);//成功
});
})
您想测试什么?节点密钥<代码>wrapper.findWhere(node=>node.key()='foo')代码>否我正在编写一个网页包加载程序,它将触发该警告,我不想在我的测试控制台中看到它。我已经这样做了,模拟控制台。错误不起作用unfortunately@Lukas您使用的是什么版本的React
和Jest
?(这在我的环境中正常工作)