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
?(这在我的环境中正常工作)