javascript - 哪种单元测试设置是正确的?这两个测试是否都检查功能是否正确并且工作正常?

标签 javascript reactjs unit-testing

我刚刚开始使用 Jest/enzyme 对 React JS 进行一些单元测试。 我想知道哪种测试(格式)对于将来的测试更有用且更正确。这是我目前正在做的两个不同的测试。

单元测试 1:我根据此设置编写了大部分测试

import React from 'react';
import Enzyme from 'enzyme';
import { shallow} from 'enzyme';
import EditWorkflow from './EditWorkflow';
import Adapter from 'enzyme-adapter-react-15';


//render must import shallow = method to show object structure
//Unit Test  V
Enzyme.configure({ adapter: new Adapter() })

 describe ('<Workflow />', () => {
    it( 'renders 1 <Workflow /> Component', () => {
        const Component = shallow(<EditWorkflow  name= "workflow"/>);
       expect(Component).toHaveLength(1);

    });
    describe('It renders props correctly', () => {
        const Component = shallow(<EditWorkflow name= "workflow"/>);
        expect(Component.instance().props.name).toBe('workflow');
    })
});

**单元测试2 编写单元测试的不同方式****

import React from 'react';
import Enzyme from 'enzyme';
import Adapter from 'enzyme-adapter-react-15';
import { Login } from './App';
 import renderer from 'react-test-renderer';

Enzyme.configure({adapter: new Adapter()});
let wrapper;

let defaultProps = {
 getSessionContext: jest.fn(),
 checkSession: jest.fn(),
     }

let mockCheckSession;

describe('Login', () => {
 beforeEach(() => {
 mockCheckSession = jest.fn(()=>{return true})
 defaultProps = {
 getSessionContext: jest.fn(),
 checkSession: mockCheckSession,
 }
  })

  it('should render "authorizing..." if theres no session ', () => {
   mockCheckSession = jest.fn(()=>{return false})
   defaultProps.checkSession = mockCheckSession;

  const tree = renderer
  .create(<Login {...defaultProps} />)
  .toJSON();

  expect(tree).toMatchSnapshot();
})
  it('should render null if there is a session ', () => {
  mockCheckSession = jest.fn(()=>{return true})
  defaultProps.checkSession = mockCheckSession;    

  const tree = renderer
  .create(<Login {...defaultProps}/>)
  .toJSON();

 expect(tree).toMatchSnapshot();
 })
 })

最佳答案

由于您没有提供完整的代码,因此很难帮助您使用当前的组件。以下是一些一般提示:

为 React 组件编写(良好)单元测试的目标之一是确保组件按照您希望的方式运行和呈现。我通常做的,在这部分没有对错之分,就是开始从上到下阅读渲染函数并记下每个逻辑部分。

示例#1:

只需测试 className 是否设置在正确的元素上。

class Screen extends Component {
  render() {
    return (
      <div className={this.props.className}>
        <h1>My screen</h1>
      </div>
    );
  }
}

it('should set the className on the first div', () => {
  const wrapper = shallow(<Screen className="screen" />);

  expect(wrapper.hasClass('screen')).toBeTruthy();
});

示例#2:

如果组件有条件地渲染某个部件,您需要测试这两种情况。

class Screen extends Component {
  render() {
    return (
      <div className={this.props.className}>
        <h1>My screen</h1>
        {this.props.subheading ? <h4>{this.props.subheading}</h4> : null}
      </div>
    );
  }
}

it('should not render the subheading when not given by prop', () => {
  const wrapper = shallow(<Screen />);

  expect(wrapper.find('h4').exists()).toBeFalsy();
});

it('should render the subheading when given by prop', () => {
  const wrapper = shallow(<Screen subheading="My custom subheading!" />);

  expect(wrapper.find('h4').exists()).toBeTruthy();
  expect(wrapper.find('h4').text()).toEqual('My custom subheading!');
});

我可以举更多例子,但我想你会明白的。

关于javascript - 哪种单元测试设置是正确的?这两个测试是否都检查功能是否正确并且工作正常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54007442/

相关文章:

javascript - 功能似乎没有在点击时执行

javascript - 我有这个错误: Cannot read property 'value' of null, I dont understand why

reactjs - 如何忽略ReactJs中状态的属性更新?

javascript - 条件渲染在 reactjs 中没有按预期工作

ios - 构建 Swift 框架测试失败

c# - 使用序列化 C# 比较两个对象

android - ArgumentCapture 不起作用

javascript - 如何使用正则表达式将相同的模式文本替换为空白?

javascript - CHM 文件;有这个格式的标准替代品吗

javascript - 映射对象的特定特定数组