私は自分のコンポーネントをテストするために使用enzyme
からに切り替えています。react-testing-library
fromCustomModal
のラッパーのように機能する単純なコンポーネントがあります。myに必要な子要素が含まれていることをテストしようとしています。Modal
reactstrap
CustomModal
この記事とこの記事からヒントを得data-testid
て、子に属性を追加し、 と を使用getByTestId
してqueryByTestId
います。しかし、何らかの理由で、私の知る限り、そこにある子ノードがクエリで見つかりません。
テストのセットアップで間違っていることがありますか、またはreact-testing-library
使用方法を誤解していますか?
基本コードとテスト (失敗) は、この CodeSandbox にあります。
私の基本的なCustomModal
コンポーネントは次のようになります。
/*
* src/components/CustomModal/index.js
*/
import React from "react";
import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from "reactstrap";
const getSanitizedModalProps = props => {
let modalProps = { ...props };
delete modalProps.onConfirm;
delete modalProps.onCancel;
delete modalProps.headerText;
delete modalProps.children;
modalProps.isOpen = modalProps.isOpen === true;
return modalProps;
};
export default props => {
return (
<Modal data-testid="modal" {...getSanitizedModalProps(props)}>
<ModalHeader data-testid="modal-header">{props.headerText}</ModalHeader>
<ModalBody data-testid="modal-body">{props.children}</ModalBody>
<ModalFooter data-testid="modal-footer">
<Button data-testid="confirm-button" onClick={props.onConfirm}>
Confirm
</Button>
<Button data-testid="cancel-button" onClick={props.onCancel}>
Cancel
</Button>
</ModalFooter>
</Modal>
);
};
私のテストファイルは次のようになります。
/*
* src/components/CustomModal/CustomModal.test.js
*/
import React from "react";
import { render } from "react-testing-library";
import CustomModal from "./index";
const TEST_IDS = {
modal: "modal",
header: "modal-header",
body: "modal-body",
footer: "modal-footer",
cancel: "cancel-button",
confirm: "confirm-button"
};
describe("<Modal />", () => {
const headerText = "hello world";
it("renders all of the children", () => {
const { queryByTestId } = render(<CustomModal headerText={headerText} />);
// The following assertions all fail
expect(queryByTestId(TEST_IDS.modal)).toBeTruthy();
expect(queryByTestId(TEST_IDS.header)).toBeTruthy();
expect(queryByTestId(TEST_IDS.body)).toBeTruthy();
expect(queryByTestId(TEST_IDS.footer)).toBeTruthy();
expect(queryByTestId(TEST_IDS.cancel)).toBeTruthy();
expect(queryByTestId(TEST_IDS.confirm)).toBeTruthy();
});
});