2017-08-24 2 views
2

Donc, fondamentalement, lorsque le composant est monté, un écouteur d'événements écoute les événements de redimensionnement. Il bascule l'état isMobileView puis le passe dans les enfants comme un accessoire. Il est donc impératif que cela fonctionne et soit testé. Je suis relativement novice dans le domaine des tests et j'essaie de trouver un moyen de rédiger un test qui redimensionne la fenêtre et fait en sorte que toute la logique se déroule et teste qu'elle s'exécute comme elle le devrait.Déterminer comment modifier le changement de taille de la fenêtre pour un test de composant de réaction

Voici le code -

componentDidMount() { 
    this.setMobileViewState() 
    window.addEventListener('resize', this.setMobileViewState.bind(this)); 
} 

setMobileViewState() { 
    if(document.documentElement.clientWidth <= this.props.mobileMenuShowWidth) { 
     this.setState({ isMobileView: true }) 
    } else { 
     this.setState({ isMobileView: false }) 
    } 
} 

Je sais que le code fonctionne, mais je veux écrire un test pour elle. Fondamentalement juste quelque chose qui assure que l'état change correctement. À l'aide de Jest and Enzyme, vous pouvez effectuer les opérations suivantes:

+0

Je peux vous montrer comment tester cela dans mocha/sinon si ça vous vaut quelque chose. –

+0

@BenHare ce serait parfait, je veux une introduction à sinon ce serait un bon moment pour moi de l'apprendre je suppose. Si je vois un code de travail, cela m'aidera beaucoup. Je ne sais pas si je peux le comprendre à partir d'autres exemples – joe

+0

Excuses Je pensais que je pourrais le faire fonctionner, mais je ne peux pas comprendre comment stub document.documentElement –

Répondre

4

. Jest a JSDOM cuit dans Dans vos tests Jest fournit l'objet window et il est représenté par global (je pense que la valeur par défaut window.innerWidth fixé par Jest est 1024px):

test('Test something when the viewport changes.',() => { 

    // Mount the component to test. 
    const component = mount(<ComponentToTest/>); 

    ... 

    // Change the viewport to 500px. 
    global.innerWidth = 500; 

    // Trigger the window resize event. 
    global.dispatchEvent(new Event('resize')); 

    ... 

    // Run your assertion. 
}); 
+0

selon docs à https://developer.mozilla.org/en -US/docs/Web/API/Window/innerWidth, innerWidth est en lecture seule. Devrions-nous utiliser window.resizeBy (x, y); au lieu? – Simon