如何期望 getByText 在反应测试库中为假?
How to expect a getByText to be false in react testing library?
我正在使用 Jest 和 React 测试库来测试组件。
我正在尝试测试模态,但我遇到了一个奇怪的问题。当我在触发事件之前尝试通过文本获取“模态标题”时,我收到错误消息,因为呈现的文档中不存在“模态标题”。如果我在触发“打开模态”按钮后尝试寻找“模态标题”,它会起作用。但我也想测试在触发事件之前模态不存在。所以我决定期望“模态标题”是假的,但这不起作用。到目前为止,我已经尝试了 toBe(false)、toBeFalsy()、toBeNull(),甚至尝试查看长度是否为 0,但没有提到上述工作。我该如何解决这个问题。
it('Test Modal', () => {
const { getByText } = render(<TestApp />);
expect(getByText('Modal Title')).toBe(false);
fireEvent.click(getByText('Open Modal'));
expect(getByText('Modal Title')).toBeTruthy();
})
另一个好的方法是等待您的打开模式,例如:
describe('modal component', () => {
test('should not be rendered', () => {
render(<TestApp />);
expect(screen.getByText('Modal Title')).not.toBeInTheDocument();
});
test('should be rendered', async () => {
render(<TestApp />);
fireEvent.click(screen.getByText('Open Modal'));
expect(await screen.findByText('Modal Title')).toBeInTheDocument();
});
});
findBy
方法是 getBy
查询和 waitFor
.
的组合
您还可以期望 getByText
抛出如下错误:
expect(() => screen.getByText('Modal title')).toThrow();
(注意开头的 () => 符号。)
您也可以使用 queryByText
,因为这将提供一种方法来检查返回值是否为空并且需要更少的代码。下面是一个例子:
const SectionOne = screen.queryByText('Section 1')
expect(SectionOne).toBeNull()
我正在使用 Jest 和 React 测试库来测试组件。
我正在尝试测试模态,但我遇到了一个奇怪的问题。当我在触发事件之前尝试通过文本获取“模态标题”时,我收到错误消息,因为呈现的文档中不存在“模态标题”。如果我在触发“打开模态”按钮后尝试寻找“模态标题”,它会起作用。但我也想测试在触发事件之前模态不存在。所以我决定期望“模态标题”是假的,但这不起作用。到目前为止,我已经尝试了 toBe(false)、toBeFalsy()、toBeNull(),甚至尝试查看长度是否为 0,但没有提到上述工作。我该如何解决这个问题。
it('Test Modal', () => {
const { getByText } = render(<TestApp />);
expect(getByText('Modal Title')).toBe(false);
fireEvent.click(getByText('Open Modal'));
expect(getByText('Modal Title')).toBeTruthy();
})
另一个好的方法是等待您的打开模式,例如:
describe('modal component', () => {
test('should not be rendered', () => {
render(<TestApp />);
expect(screen.getByText('Modal Title')).not.toBeInTheDocument();
});
test('should be rendered', async () => {
render(<TestApp />);
fireEvent.click(screen.getByText('Open Modal'));
expect(await screen.findByText('Modal Title')).toBeInTheDocument();
});
});
findBy
方法是 getBy
查询和 waitFor
.
您还可以期望 getByText
抛出如下错误:
expect(() => screen.getByText('Modal title')).toThrow();
(注意开头的 () => 符号。)
您也可以使用 queryByText
,因为这将提供一种方法来检查返回值是否为空并且需要更少的代码。下面是一个例子:
const SectionOne = screen.queryByText('Section 1')
expect(SectionOne).toBeNull()