2017-06-08 4 views
3

Ich habe eine einfache Anwendung, sie reagieren-Router verwenden v4Testing reagieren-Router v4 mit Jest und Enzym

const App =() => (
    <Switch> 
    <Route exact path="/" component={() => <div>Home</div>}/> 
    <Route path="/profile" component={() => <div>Profile</div>}/> 
    <Route path="/help" component={() => <div>Help</div>}/> 
    </Switch> 
); 

und Test

jest.dontMock('../App'); 

import React from 'react'; 
import { MemoryRouter } from 'react-router-dom'; 
import { shallow } from 'enzyme'; 

import App from '../App'; 

describe('<App />',() => { 
    const wrapper = shallow(
    <MemoryRouter> 
     <App/> 
    </MemoryRouter> 
); 

    console.log(wrapper.html()); 

    it('renders a static text',() => { 
    expect(
     wrapper.contains(<div>Home</div>) 
    ).toBe(true); 
    }); 
}); 

Warum dieser Test fällt? enter image description here

Meine config:

  • Enzym: 2.8.2
  • reagieren-Skripte: 1.0.7
  • reagieren Test-Renderer: 15.5.4

Antwort

3

Sie haben initialEntries sowie initialIndex bereitzustellen. In Ihrem Fall sollte es so aussehen:

const wrapper = shallow(
    <MemoryRouter initialEntries={['/']} initialIndex={0}> 
    <App/> 
    </MemoryRouter> 
); 

Andere Möglichkeit ist, dass Sie enzyme ‚s mount statt shallow müssen.

react-router hat einige großartige Dokumentation hier: https://reacttraining.com/react-router/core/api/MemoryRouter

+0

Wie diese Prüfung ändern, wenn i 'contains' zu' equals' ersetzen würde? – Pavel

+0

Es gibt https://github.com/blainekasten/enzym-matchers Bibliothek, die Ihnen erlaubt, etwas wie zu schreiben: 'expect (wrapper.find (Komponente)). ToBePresent()'. Aber Sie brauchen möglicherweise keine zusätzliche Bibliothek. Werfen Sie einen Blick auf die offizielle 'Enzym'-Dokumentation, die eine gute Erklärung für verfügbare Selektoren bietet. In Ihrem Fall etwas wie 'expect (wrapper.find (

Home
)). ToHaveLength (1)' könnte funktionieren. –

+0

Ich habe dies getan, aber das Problem ist, dass sie das Kind ist memoryRouter (wenn auf dem Mount) und Sie können nicht setzen, und so weiter – FabioCosta

Verwandte Themen