javascript - Testing av React Native FlatList med Enzyme


Jeg prøver å teste med Enzyme en React Native FlatList. Jeg vil sjekke om riktig funksjon blir kalt når listen når slutten:

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 dette er hva jeg 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)

Hva gjør jeg galt? Hva er den riktige måten å teste dette på?

Svar #1

Som det står nå, virker det ikke mulig/veldig hyggelig å teste React Native med enzyme så snart du går utover en veldig enkel shallow render- og snapshot-kombinasjon.

Jeg har funnet ut at det å bruke Test Renderer er langt mer pålitelig for å gjengi noe som en FlatList, utforske den og utføre handlinger

I tillegg vil det være vanskelig å teste det ovennevnte, så langt har jeg sjekket at de riktige API-ene blir kalt ved å bruke spioner i stedet for faktisk å teste funksjonaliteten som ovenfor.

Denne feilen skjer fordi scrollTo ikke har blitt korrekt mock-et på ScrollView-mocken, noe du kan omgå med jest.mock for eksempel. Se: dette problemet