2016-12-26 3 views
8

Angenommen habe ich diese Komponente:Testing Bauteilverhalten (click) in React-Mutter mit Jest

import React, { Component } from 'react'; 
import { Text, TouchableWithoutFeedback, View } from 'react-native'; 

class MyComp extends Component { 
    onRowPress() { 
    this.myCoolFunction(); 
    } 

    myCoolFunction() { 
    console.log('hi'); 
    } 

    render() { 
    return (
     <TouchableWithoutFeedback onPress={this.onRowPress.bind(this)}> 
     <View> 
      <Text>Hello World</Text> 
     </View> 
     </TouchableWithoutFeedback> 
    ); 
    } 
} 

export default MyComp; 

Wie gehe ich über die Simulation von 1 Klick auf den ‚TouchableWithoutFeedback‘ und dafür sorgen, dass ‚myCoolFunction‘ genannt wurde genau 1 mal?

Wenn es kein Muss ist, dann würde ich es vorziehen, nicht mehr Abhängigkeiten andere als ‚reagieren-dom‘ und ‚reagieren-addons-Test-utils‘ hinzuzufügen.

Ich habe viele Guides gesehen, die behaupten, dies und das zu sein, aber ich fürchte, sie sind veraltet und ich möchte sicher sein, dass ich keine unnötigen Workarounds durchhalte und meinen Code aufgebläht habe.

Ich habe Scherz/reagieren/reagieren nativer in ihren neuesten Versionen.

Edit: In Jest's official documentation heißt es, dass DOM-Tests entweder mit Enzym oder TestUtils durchgeführt werden können. Wie kann ich dies mit den TestUtils erreichen?

+0

Werfen Sie einen Blick auf diese [Tutorial] (https://facebook.github.io/jest/docs/tutorial-react.html) von React Seite. Was Sie testen sollten, ist der Zustand der Komponente, wie von Facebook vorgeschlagen, nicht wenn onClick ausgeführt wurde. Nun, wenn Sie nach dem Klicken auf die Schaltfläche erwarten, dass eine andere Komponente aufgerufen wird, sollten Sie diese Komponente vortäuschen. –

+0

Wie Sie sehen können, manipuliert mein onClick den Zustand nicht. Auch dies sind Reaktionstests, so dass es einfacher ist, auf das DOM zuzugreifen. – Tsury

Antwort

0

Ich weiß, Sie wollen nicht andere Abhängigkeiten hinzufügen, aber es gibt eine Funktion in der Bibliothek underscoreonce

Erstellt eine Version der Funktion aufgerufen, die nur einmal aufgerufen werden kann. Wiederholte Aufrufe der geänderten Funktion haben keine Auswirkungen und geben den Wert des ursprünglichen Aufrufs zurück.

Auf diese Weise werden Sie sicher sein, es einmal genannt wurde.

+1

Sie haben mich vielleicht missverstanden. Die Sache, die ich wissen möchte, ist, wie man Jest verwendet, um einen Klick auf meine Komponente zu simulieren. – Tsury

0

Ich weiß, diese Antwort nicht auf Ihre Anforderung nicht anpassen der keine zusätzlichen Abhängigkeiten, aber ich glaube nicht, dass nur mit Jest und Enzyme tun können. Jest bietet Ihnen den Runner, Assertion-Funktionen und Snapshot-Tests und Enzyme führt alle DOM-Manipulationen und Event-Simulationen durch. Um jedoch zu wissen, dass Ihre Funktion genau einmal aufgerufen wurde, benötigen Sie etwas anderes (d. H. Einen Spion). Wir verwenden sinon dafür, etwa so:

... 
const onButtonClick = sinon.spy() 
const wrapper = shallow(<MyComponent onButtonClick={onButtonClick}/>) 
wrapper.find(`img`).first().simulate(`click`) 
wrapper.find(`img`).first().simulate(`click`) 
expect(onButtonClick.calledTwice).toBe(true) 
...