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