2016-07-26 12 views
15

Piszę test z użyciem Enzyme dla React.Testy enzymatyczne w reakcji, Nie można odczytać właściwości "have" z undefined

Mój test jest niezwykle prosta:

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); 
    }); 
}); 

Kod ten jest w zasadzie pobierane bezpośrednio z airbnb/enzyme docs, ale zwraca błąd:

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

Jestem trochę niejasna, co robię inaczej niż docs. Wszelkie wskazówki bardzo doceniane.

Odpowiedz

10

Zastosowanie Link zamiast <Link />:

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

Wydaje się w 1. przykład w docs Airbnb/enzymatycznych:

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

Dzięki za odpowiedź - widzę ten sam błąd z 'Link'. I podążam za dokumentami, chociaż kod, którego używam, importuje "spodziewać się" Michaela Jacksona i nie jestem pewien, czy to wyrzuci (sprawdziłem też dokumenty tam). – Toby

+0

Jaką bibliotekę asercji używasz? Wypróbuj to - 'console.log ('length', wrapper.find (Link) .length);' i zobacz, co pojawia się w konsoli. –

+0

Dodanie tej wartości spowoduje powstanie oczekiwanego wpisu w dzienniku - "5". Używam Karmy z Chai, ale z Michaelem Jacksonem [spodziewać się] (https://github.com/mjackson/expect). – Toby

4

W ich dokumentacji enzym jest za pomocą Chai twierdzenie, więc jeśli chcesz aby użyć expect(***).to.have.length(***), musisz zainstalować chai-enzyme i użyć jej expect. Będzie to zatem prowadzić do problemów z expect(***).toMatchSnapshot(), jeśli używasz migawek Jest, ale ten article pomoże ci go rozwiązać, więc możesz zrobić jedno i drugie.

+0

Dzięki - jest to przydatne dla początkujących, którzy nie rozpoznają składni ze wszystkich bibliotek! –

Powiązane problemy