React testing library not finding clickable element (sorting table by click)

Viewed 777

What I am trying to do is test that clicking the first table header column sorts the rows of the table using React Testing Library. I have mocked some data which seems to render just fine.

Note: I am pretty sure this has nothing to do with the components used, so I did not bother putting the here.

enter image description here

The problem

However, when I fire the click event with React Testing Library (which should sort the rows), the rows are not sorted.

It seems like the correct element is not found.

Here is the component tree in the browser:

enter image description here

The code

describe("Testing fullscring timp table", () => {
  let mockData = [];
  let columns = [];
  let store;
  let history;
  let mockStore;
  let global;

  beforeAll(() => {
    // column definitions for the Table component
    columns = [
      { dataKey: "1", title: "first", dataIndex: 1 },
      { dataKey: "2", title: "second", dataIndex: 2 },
      { dataKey: "3", title: "third", dataIndex: 3 },
      { dataKey: "4", title: "fourth", dataIndex: 4 },
      { dataKey: "5", title: "fifth", dataIndex: 5 },
      { dataKey: "6", title: "sixth", dataIndex: 6 }
    ];


    mockData = [
      {
        id: "data1",
        "1": "row1_col1",
        "2": "row1_col2",
        "3": "row1_col3",
        "4": "row1_col4",
        "5": "row1_col5",
        "6": "row1_col6"
      },
      {
        id: "data2",
        "1": "row3_col1",
        "2": "row3_col2",
        "3": "row3_col3",
        "4": "row3_col4",
        "5": "row3_col5",
        "6": "row3_col6"
      },
      {
        id: "data3",
        "1": "row2_col1",
        "2": "row2_col2",
        "3": "row2_col3",
        "4": "row2_col4",
        "5": "row2_col5",
        "6": "row2_col6"
      }
    ];
  });

  history = createMemoryHistory();

  // Mocking redux state
  mockStore = configureMockStore();

  // Setting language to be english
  global = { language: "en" };

  store = mockStore({ global });

  test("rendering all rows", async () => {
    let global = { language: "en" };
    let language = global.language;

    const { debug, getAllByText, getByText } = render(
      <Provider store={store}>
        <Router history={history}>
          <Table
            data={mockData}
            columns={columns}
            fullscreenContent={
              mockData.length > 0 && (
                <Modal
                  visible={true}
                  collapseIcon={<CollapseButton role="button" />}
                  expandIcon={<FullscreenButton />}
                >
                  <FullscreenTimpTable
                    data={mockData}
                    columns={columns}
                    language={language}
                  />
                </Modal>
              )
            }
          />
        </Router>
      </Provider>
    );
    debug();
    expect(getByText("row2_col3")).toBeInTheDocument(); // THIS PASSES

    await waitFor(() => getByText("first"));
    const columnOneNode = getByText("first");
    console.log(columnOneNode);

    fireEvent.click(columnOneNode);

    debug(); // SEE PRINT BEWOW

The console.log after the last debug():

    console.log
      <body>
        <div>
          <div
            class="sc-dGHRBR kaxIcm  "
          >
            <div
              class="sc-cTwCau byurQa"
            >
              <div
                class="sc-guxjaN gGrZid"
              >
                <button
                  class="sc-jifIRw erwlEw sc-hWvDPW cLPWjv"
                  color="primary"
                >
                  <span
                    class="sc-gHftXq XnfsF"
                    color="inherit"
                    height="24"
                    width="24"
                  >
                    <svg
                      border="currentcolor"
                      fill="currentcolor"
                      height="24"
                      viewBox="0 0 24 24"
                      width="24"
                      xmlns="http://www.w3.org/2000/svg"
                    >
                      <path
                        clip-rule="evenodd"
                        d="M7 10H5V5h5v2H7v3zm-2 4h2v3h3v2H5v-5zm12 3h-3v2h5v-5h-2v3zM14 7V5h5v5h-2V7h-3z"
                        fill-rule="evenodd"
                      />
                    </svg>
                  </span>
                  <span
                    class="sc-JAcuL hUrElW"
                    color="#000"
                  />
                </button>
              </div>
            </div>
            <div
              class="sc-jEnjew hvDKdx"
            >
              <div
                class="sc-fKuJET kPkHKR"
              >
                <div
                  class="sc-fHCNCx btXYRM"
                >
                  <div
                    class="sc-Eryum cfbqUS"
                  >
                    <div
                      class="sc-ecVWCn cWCaBT"
                      scope="col"
                    >
                      <div
                        class="sc-lmyTMs hhYbMe"
                      >
                        first
                      </div>
                    </div>
                    <div
                      class="sc-ecVWCn cWCaBT"
                      scope="col"
                    >
                      <div
                        class="sc-lmyTMs hhYbMe"
                      >
                        second
                      </div>
                    </div>
                    <div
                      class="sc-ecVWCn cWCaBT"
                      scope="col"
                    >
                      <div
                        class="sc-lmyTMs hhYbMe"
                      >
                        third
                      </div>
                    </div>
                    <div
                      class="sc-ecVWCn cWCaBT"
                      scope="col"
                    >
                      <div
                        class="sc-lmyTMs hhYbMe"
                      >
                        fourth
                      </div>
                    </div>
                    <div
                      class="sc-ecVWCn cWCaBT"
                      scope="col"
                    >
                      <div
                        class="sc-lmyTMs hhYbMe"
                      >
                        fifth
                      </div>
                    </div>
                    <div
                      class="sc-ecVWCn cWCaBT"
                      scope="col"
                    >
                      <div
                        class="sc-lmyTMs hhYbMe"
                      >
                        sixth
                      </div>
                    </div>
                  </div>
                </div>
                <div
                  class="sc-cQEFXY lmcHyl"
                >
                  <div
                    class="sc-hWgnmY sc-fIUAZz jwDMjI bwTNEX 
            
            
             "
                  >
                    <div
                      class="sc-eiBfYF lhXYii"
                    >
                      <div
                        class="sc-eUZScX fJNtUH"
                      >
                        <span>
                          row1_col1
                        </span>
                      </div>
                    </div>
                    <div
                      class="sc-eiBfYF lhXYii"
                    >
                      <div
                        class="sc-eUZScX fJNtUH"
                      >
                        <span>
                          row1_col2
                        </span>
                      </div>
                    </div>
                    <div
                      class="sc-eiBfYF lhXYii"
                    >
                      <div
                        class="sc-eUZScX fJNtUH"
                      >
                        <span>
                          row1_col3
                        </span>
                      </div>
                    </div>
                    <div
                      class="sc-eiBfYF lhXYii"
                    >
                      <div
                        class="sc-eUZScX fJNtUH"
                      >
                        <span>
                          row1_col4
                        </span>
                      </div>
                    </div>
                    <div
                      class="sc-eiBfYF lhXYii"
                    >
                      <div
                        class="sc-eUZScX fJNtUH"
                      >
                        <span>
                          row1_col5
                        </span>
                      </div>
                    </div>
                    <div
                      class="sc-eiBfYF lhXYii"
                    >
                      <div
                        class="sc-eUZScX fJNtUH"
                      >
                        <span>
                          row1_col6
                        </span>
                      </div>
                    </div>
                  </div>
                  <div
                    class="sc-hWgnmY sc-fIUAZz jwDMjI bwTNEX 
            
            
             "
                  >
                    <div
                      class="sc-eiBfYF lhXYii"
                    >
                      <div
                        class="sc-eUZScX fJNtUH"
                      >
                        <span>
                          row3_col1
                        </span>
                      </div>
                    </div>
                    <div
                      class="sc-eiBfYF lhXYii"
                    >
                      <div
                        class="sc-eUZScX fJNtUH"
                      >
                        <span>
                          row3_col2
                        </span>
                      </div>
                    </div>
                    <div
                      class="sc-eiBfYF lhXYii"
                    >
                      <div
                        class="sc-eUZScX fJNtUH"
                      >
                        <span>
                          row3_col3
                        </span>
                      </div>
                    </div>
                    <div
                      class="sc-eiBfYF lhXYii"
                    >
                      <div
                        class="sc-eUZScX fJNtUH"
                      >
                        <span>
                          row3_col4
                        </span>
                      </div>
                    </div>
                    <div
                      class="sc-eiBfYF lhXYii"
                    >
                      <div
                        class="sc-eUZScX fJNtUH"
                      >
                        <span>
                          row3_col5
                        </span>
                      </div>
                    </div>
                    <div
                      class="sc-eiBfYF lhXYii"
                    >
                      <div
                        class="sc-eUZScX fJNtUH"
                      >
                        <span>
                          row3_col6
                        </span>
                      </div>
                    </div>
                  </div>
                  <div
                    class="sc-hWgnmY sc-fIUAZz jwDMjI bwTNEX 
            
            
             "
                  >
                    <div
                      class="sc-eiBfYF lhXYii"
                    >
                      <div
                        class="sc-eUZScX fJNtUH"
                      >
                        <span>
                          row2_col1
                        </span>
                      </div>
                    </div>
                    <div
                      class="sc-eiBfYF lhXYii"
                    >
                      <div
                        class="sc-eUZScX fJNtUH"
                      >
                        <span>
                          row2_col2
                        </span>
                      </div>
                    </div>
                    <div
                      class="sc-eiBfYF lhXYii"
                    >
                      <div
                        class="sc-eUZScX fJNtUH"
                      >
                        <span>
                          row2_col3
                        </span>
                      </div>
                    </div>
                    <div
                      class="sc-eiBfYF lhXYii"
                    >
                      <div
                        class="sc-eUZScX fJNtUH"
                      >
                        <span>
                          row2_col4
                        </span>
                      </div>
                    </div>
                    <div
                      class="sc-eiBfYF lhXYii"
                    >
                      <div
                        class="sc-eUZScX fJNtUH"
                      >
                        <span>
                          row2_col5
                        </span>
                      </div>
                    </div>
                    <div
                      class="sc-eiBfYF lhXYii"
                    >
                      <div
                        class="sc-eUZScX fJNtUH"
                      >
                        <span>
                          row2_col6
                        </span>
                      </div>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </body>

console.log(columnNode):

HTMLDivElement {
        '__reactInternalInstance$xx9v4qrl33d': FiberNode {
          tag: 5,
          key: null,
          elementType: 'div',
          type: 'div',
          stateNode: [Circular],
          return: FiberNode {
            tag: 11,
            key: null,
            elementType: [Object],
            type: [Object],
            stateNode: null,
            return: [FiberNode],
            child: [Circular],
            sibling: null,
            index: 0,
            ref: null,
            pendingProps: [Object],
            memoizedProps: [Object],
            updateQueue: null,
            memoizedState: null,
            dependencies: [Object],
            mode: 0,
            effectTag: 1,
            nextEffect: null,
            firstEffect: null,
            lastEffect: null,
            expirationTime: 0,
            childExpirationTime: 0,
            alternate: null,
            actualDuration: 0,
            actualStartTime: -1,
            selfBaseDuration: 0,
            treeBaseDuration: 0,
            _debugID: 100,
            _debugIsCurrentlyTiming: false,
            _debugSource: null,
            _debugOwner: [FiberNode],
            _debugNeedsRemount: false,
            _debugHookTypes: [Array]
          },
          child: null,
          sibling: null,
          index: 0,
          ref: null,
          pendingProps: {
            onClick: [Function: onClick],
            children: 'first',
            className: 'sc-lmyTMs hhYbMe'
          },
          memoizedProps: {
            onClick: [Function: onClick],
            children: 'first',
            className: 'sc-lmyTMs hhYbMe'
          },
          updateQueue: null,
          memoizedState: null,
          dependencies: null,
          mode: 0,
          effectTag: 0,
          nextEffect: null,
          firstEffect: null,
          lastEffect: null,
          expirationTime: 0,
          childExpirationTime: 0,
          alternate: null,
          actualDuration: 0,
          actualStartTime: -1,
          selfBaseDuration: 0,
          treeBaseDuration: 0,
          _debugID: 102,
          _debugIsCurrentlyTiming: false,
          _debugSource: null,
          _debugOwner: FiberNode {
            tag: 11,
            key: null,
            elementType: [Object],
            type: [Object],
            stateNode: null,
            return: [FiberNode],
            child: [Circular],
            sibling: null,
            index: 0,
            ref: null,
            pendingProps: [Object],
            memoizedProps: [Object],
            updateQueue: null,
            memoizedState: null,
            dependencies: [Object],
            mode: 0,
            effectTag: 1,
            nextEffect: null,
            firstEffect: null,
            lastEffect: null,
            expirationTime: 0,
            childExpirationTime: 0,
            alternate: null,
            actualDuration: 0,
            actualStartTime: -1,
            selfBaseDuration: 0,
            treeBaseDuration: 0,
            _debugID: 100,
            _debugIsCurrentlyTiming: false,
            _debugSource: null,
            _debugOwner: [FiberNode],
            _debugNeedsRemount: false,
            _debugHookTypes: [Array]
          },
          _debugNeedsRemount: false,
          _debugHookTypes: null
        },
        '__reactEventHandlers$xx9v4qrl33d': {
          onClick: [Function: onClick],
          children: 'first',
          className: 'sc-lmyTMs hhYbMe'
        },
        [Symbol(SameObject caches)]: [Object: null prototype] { childNodes: NodeList {} }
      }

What I have tried

I have tried to use

  • findByRole('gridcell')
  • getByText("first").closest('div')
  • getByText("first").closest('Button')
  • getByText("first").closest('button')

Neither of those strategies worked.

Any ideas?

0 Answers
Related