我应该测试相反的情况吗?

Should I test contrary cases?

我正在使用 tdd,我不确定我应该测试相反的情况还是只测试预期的情况。

测试 1

test('should render loading placeholder if isloading = true', () => {
    const wrapper = shallow(
      <OrderDetails id="10" />
    );
    wrapper.setState({ isLoading: true });
    expect(wrapper.find(LoadingPlaceholder).length).toBe(1);
})

测试 2

test('should not render loading placeholder if isloading = false', () => {
    const wrapper = shallow(
      <OrderDetails id="10" />
    );
    wrapper.setState({ isLoading: false});
    expect(wrapper.find(LoadingPlaceholder).length).toBe(0);
})

组件

export default class OrderDetails extends PureComponent {
  state = {
    isLoading: true,
  }
  props: Props;
  render() {
    return (
      <div>
        {this.state.isLoading && (
           <LoadingPlaceholder />
        )}
      </div>
    )
  }
}

注意如果只加第一个测试就可以通过这个测试例如 意外通过测试

export default class OrderDetails extends PureComponent {
  state = {
    isLoading: true,
  }
  props: Props;
  render() {
    return (
      <div>
         <LoadingPlaceholder />
      </div>
    )
  }
}

您应该至少对被测单元进行尽可能多的(可区分的)状态测试。如果有两种状态(isLoading 为 true 或 false),那么您还需要两个测试,每个可能的状态一个。

换句话说更正式:一个单元的测试次数应该大于或等于该单元的圈复杂度。