reactjs - 即使在调试中,React Native Testing Library仍找不到文本

标签 reactjs typescript unit-testing react-native react-testing-library

我正在用TypeScript构建一个React Native应用程序。我正在使用React Native Testing Library进行组件测试。

我有一个简单的组件,可呈现两个可单击的图标和一个文本。这是一个可以递增和递减数字的计数器。

import React, { PureComponent } from "react";
import { Text, TouchableOpacity, View } from "react-native";
import { Button, Icon } from "react-native-elements";
import { getIconName } from "../../services/core";
import styles from "./styles";

export interface AmountButtonProps {
  amount: number;
  onDecrement: () => void;
  onIncrement: () => void;
  size: "small" | "large";
}

export class AmountButtons extends PureComponent<AmountButtonProps> {
  render() {
    const { amount, onDecrement, onIncrement, size } = this.props;
    const fontSize = size === "small" ? 14 : 26;
    const minusDisabled = amount <= 1;
    const plusDisabled = amount >= 25;
    return (
      <View style={styles.container}>
        <Icon
          containerStyle={[
            styles[size],
            styles.iconContainer,
            styles.minusIcon,
            minusDisabled && styles.disabled
          ]}
          onPress={onDecrement}
          type="ionicon"
          name={getIconName("remove")}
          disabled={minusDisabled}
          disabledStyle={[styles.iconDisabled, styles.disabled]}
          size={fontSize}
          component={TouchableOpacity}
        />
        <View style={[styles[size], styles.amountContainer, styles.iconContainer]}>
          <Text style={{ fontSize }}>{amount}</Text>
        </View>
        <Icon
          containerStyle={[
            styles[size],
            styles.iconContainer,
            styles.addIcon,
            plusDisabled && styles.disabled
          ]}
          onPress={onIncrement}
          type="ionicon"
          name={getIconName("add")}
          disabled={plusDisabled}
          disabledStyle={styles.iconDisabled}
          color="white"
          size={fontSize}
          component={TouchableOpacity}
        />
      </View>
    );
  }
}

export default AmountButtons;

我想编写一个简单的单元测试,以查看用户是否可以看到该数量。这是我写的。
import React from "react";
import { debug, fireEvent, render } from "react-native-testing-library";
import { getIconName } from "../../services/core";
import AmountButtons, { AmountButtonProps } from "./AmountButtons";

const createTestProps = (props?: object): AmountButtonProps => ({
  amount: 1,
  onDecrement: jest.fn(),
  onIncrement: jest.fn(),
  size: "large",
  ...props
});

describe("AmountButtons", () => {
  const props = createTestProps();
  const { getByText, getByProps } = render(<AmountButtons {...props} />);

  it("displays the amount", () => {
    debug(<AmountButtons {...props} />);
    expect(getByText(props.amount.toString())).toBeDefined();
  });
});

问题是此测试引发错误:
● AmountButtons › displays the amount

    Component not found.

      18 |   it("displays the amount", () => {
      19 |     debug(<AmountButtons {...props} />);
    > 20 |     expect(getByText(props.amount.toString())).toBeDefined();
         |            ^
      21 |   });
      22 |
      23 |   it("calls onIncrement", () => {

      at Object.it (app/components/AmountButtons/AmountButtons.test.tsx:20:12)

即使在debug的输出中,我也可以看到渲染的数量:
...
       }
      >
        <Text
          style={
            Object {
              "fontSize": 26,
            }
          }
        >
          1
        </Text>
      </View>
      <Themed.Icon
...

这里发生了什么?为什么React Testing库看不到此文本?我该如何测试?

最佳答案

通过查询获取文本的另一种方法
const {queryByA11yLabel} = render()
Expect(queryByA11yLabel(“1”))。toBeDefined()

关于reactjs - 即使在调试中,React Native Testing Library仍找不到文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53589963/

相关文章:

node.js - 如何强制 tsc 忽略 node_modules 文件夹?

c# - 如何在派生 Controller 中模拟 HttpContext.RequestServices.GetService<> 注入(inject)的服务?

javascript - 将 JSON 数据分配给变量并通过 React 中的状态访问它时出错

javascript - 如何在没有外部库的情况下在 React 中实现 Google Maps JS API?

typescript :数字的函数重载决议 |数组缓冲区

javascript - 使用 TypeScript 自定义 knockout 验证规则

unit-testing - 如何测试使用 DateTime 获取当前时间的函数?

c# - 在 VS 2012 中添加 Fakes 时出错

javascript - 有时会嵌入错误的 svg。在React/Redux/Webpack项目中使用react-inlinesvg

javascript - 仅当满足条件时才返回 Firebase 对象值