开玩笑,React测试组件不存在

时间:2020-09-23 03:18:45

标签: jestjs react-testing-library

我有这个测试:

const rendered = render(
  <TransactionReason
    reason={{ code: defaultReason }}
  />
);

expect(rendered.getByTestId('reasonInput')).toBeNull();

我想做的是:有一个具有testID = 'reasonInput'的组件,但是当reason道具具有我要提供的值时,该组件不会呈现(代码: defaultReason)。但是我收到了一个错误,因为Jest找不到该ID,因此没有被渲染。我认为这会产生错误或空值,这就是为什么我尝试使用toBeNulltoBeFalsy或类似的东西的原因。

然后我该如何测试该组件的不存在?

1 个答案:

答案 0 :(得分:0)

the reference指出,getByTestIdqueryByTestId之间的区别在于,如果没有匹配的元素,前者会引发错误:

getBy *查询返回查询的第一个匹配节点,并抛出 如果没有元素匹配或找到多个匹配项,则返回错误(使用 getAllBy代替。)

queryBy *查询返回查询的第一个匹配节点,并且 如果没有元素匹配,则返回null。这对于断言一个 不存在的元素。如果有多个比赛,则抛出 找到(改为使用queryAllBy)。

应该是:

expect(rendered.queryByTestId('reasonInput')).toBeNull();