2017-02-22 6 views
1

ich eine Komponente mich entschieden, die eine untergeordnete Komponente macht, die folgende contextTypes hat:Jest - eine Komponente zu testen, die reagieren-Router verwendet

Component.contextTypes = {router: PropTypes.object.isRequired} 

ich völlig neu bin zu scherzen, aber aus Richtung Mokka/Enzym I Ich bin nie auf dieses Problem gestoßen.

Mein erster Test sieht wie folgt aus, und ich bin wirklich nur damit rumgespielt, um zu sehen, wie es funktioniert:

it('should exist',() => { 
    wrapper = renderer.create(<Companies/>); 
    let tree = wrapper.toJSON(); 
    expect(tree).toMatchScreenshot(); 
}); 

Wenn ich den Test ausführen ich die folgende Fehlermeldung erhalten:

Failed context type: The context `router` is marked as required in `ChildComponent`, but its value is `undefined`. 

Gibt es eine Arbeit dafür, oder nur etwas in den Dokumenten, die ich vermisse? Danke im Voraus!

LÖSUNG: Für alle, die in der gleichen Ausgabe läuft, habe ich folgendes in einem before():

MyComponent.contextTypes = { 
     router: function() { 
      return { 
       transitionTo: jest.genMockFunction() 
      }; 
     } 
    }; 
+0

Welche Version von React-Router verwendet es? – paqash

+0

@paqash Version 2.4.1 – Jake

Antwort

2

ich ein ähnliches Problem hatte, als ich <Link> in irgendeiner Komponente wurde, und denselben Fehler konfrontiert wie oben. In meinem Fall habe ich react-router 4.1.1 verwendet und obige Lösung hat nicht funktioniert.

Ich habe Objekt und Funktionen in den Kontext eingefügt, aber ich hoffe, jemand gibt mir eine bessere Lösung dafür.

describe('SomeComponent',()=>{ 

    it('renders component',()=>{ 
    const wrapper = mount(
     <SomeComponent />, 
     { 
     context: { 
      router: { 
      history: { 
       push:()=>{}, 
       replace:()=>{}, 
       createHref:()=>{}, 
      } 
      } 
     }, 
     childContextTypes: { 
      router: PropTypes.object.isRequired, 
     } 
     } 
    ) 
    expect(wrapper.text()).toContain('some component text') 
    }) 

}) 

Ich verwende Enzym für mount.

Verwandte Themen