2016-07-26 33 views
15

Ich schreibe einen Test mit Enzyme für React.Reaction enzyme testing, Kann Eigenschaft 'have' von undefined nicht lesen

Mein Test ist extrem einfach:

import OffCanvasMenu from '../index'; 
import { Link } from 'react-router'; 

import expect from 'expect'; 
import { shallow, mount } from 'enzyme'; 
import sinon from 'sinon'; 
import React from 'react'; 

describe('<OffCanvasMenu />',() => { 
    it('contains 5 <Link /> components',() => { 
    const wrapper = shallow(<OffCanvasMenu />); 
    expect(wrapper.find(<Link />)).to.have.length(5); 
    }); 
}); 

Dieser Code ist im Grunde direkt von airbnb/enzyme docs genommen, aber gibt den Fehler:

FAILED TESTS: 
    <OffCanvasMenu /> 
    ✖ contains 5 <Link /> components 
     Chrome 52.0.2743 (Mac OS X 10.11.6) 
    TypeError: Cannot read property 'have' of undefined 

ich auf ein wenig unklar bin, was ich tue anders als die Dokumente. Jede Anleitung sehr geschätzt.

Antwort

10

Verwenden Link statt <Link />:

describe('<OffCanvasMenu />',() => { 
    it('contains 5 <Link /> components',() => { 
    const wrapper = shallow(<OffCanvasMenu />); 
    expect(wrapper.find(Link)).to.have.length(5); 
    }); 
}); 

Es erscheint im ersten Beispiel in den airbnb/Enzym-docs:

it('should render three <Foo /> components',() => { 
    const wrapper = shallow(<MyComponent />); 
    expect(wrapper.find(Foo)).to.have.length(3); 
    }); 
+0

Danke für die Antwort - Ich sehe den gleichen Fehler mit 'Link'. Und ich folge den Dokumenten, obwohl der Code, den ich benutze, Michael Jacksons "expect" importiert, und ich bin mir nicht sicher, ob das den Unterschied macht (ich habe die Dokumente auch dort überprüft). – Toby

+0

Welche Assertion-Bibliothek verwenden Sie? Probieren Sie dies aus - 'console.log ('length', wrapper.find (Link) .length);' und sehen Sie, was in der Konsole angezeigt wird. –

+0

Wenn Sie dies hinzufügen, wird der erwartete Eintrag im Protokoll "5" erstellt. Ich benutze Karma mit Chai, aber mit Michael Jackson [erwarten] (https://github.com/mjackson/expect). – Toby

4

In ihrer Dokumentation Das Enzym wird Chai Behauptung verwenden, wenn Sie so wollen Um expect(***).to.have.length(***) zu verwenden, müssen Sie chai-enzyme installieren und expect verwenden. Es wird daher zu Problemen mit expect(***).toMatchSnapshot() führen, wenn Sie Jest-Snapshots verwenden, aber diese article wird Ihnen helfen, es zu lösen, so dass Sie beides tun können.

+0

Danke - das ist hilfreich für uns Neulinge, die die Syntax aus den verschiedenen Bibliotheken nicht erkennen! –