javascript - Testa React Native FlatList med Enzyme


Jag försöker testa med Enzyme en React Native FlatList. Jag vill kontrollera om rätt funktion kallas när listan når slutet:

import { listIsAtTheEnd } from "./actions";
import { mount } from "enzyme";
jest.mock("./actions");


describe("Main page", () => {
    if("Calls listIsAtTheEnd when FlatList reaches the end", () => {
        var app = mount(<App />);
        var container = app.find("FlatListContainer");
        var fList = container.childAt(0);
        fList.instance().scrollToEnd();

        expect(listIsAtTheEnd.mock.calls).toHaveLength(1)
    })
})

Men detta är vad jag får:

TypeError: this._scrollRef.scrollTo is not a function

  at VirtualizedList.scrollToEnd (node_modules/react-native/Libraries/Lists/VirtualizedList.js:219:17)
  at FlatList.scrollToEnd (node_modules/react-native/Libraries/Lists/FlatList.js:544:141)
  at Object.<anonymous> (src/components/forumPage/__tests__/forumPageTests.js:81:21)
  at tryCallTwo (node_modules/promise/lib/core.js:45:5)
  at doResolve (node_modules/promise/lib/core.js:200:13)
  at new Promise (node_modules/promise/lib/core.js:66:3)

Vad gör jag fel? Vad är det rätta sättet att testa detta?

Svar #1

Som det ser ut verkar det inte möjligt/inte särskilt bra att testa React Native med enzyme så snart du går bortom en mycket enkel shallow render och snapshot-kombination.

Jag har funnit att använda Test Renderer är mycket mer pålitligt för att rendera något som en FlatList, traversera det och anropa handlingar

Dessutom kommer det att vara svårt att testa ovanstående, hittills har jag kontrollerat att rätt API:er kallas med hjälp av spioner snarare än att faktiskt testa funktionaliteten som ovan.

Detta fel uppstår dock eftersom scrollTo inte har mockats korrekt på ScrollView-mocken, vilket du kan kringgå med jest.mock till exempel. Se: detta problem