2017-02-18 20 views
4

Я пишу свои первые тесты с реакцией и сталкиваюсь с проблемой, когда мой оператор beforeEach не работает. Вот мой тестовый файл:React & Enzyme: почему не раньше?() Работает?

import React from 'react'; 
import { shallow } from 'enzyme'; 
import Home from '../components/Home'; 
import IntroText from '../components/IntroText'; 
import Form from '../components/Form'; 

describe('<Home />',() => { 
    beforeEach(() => { 
    const wrapper = shallow(<Home />); 
    }); 

    it('renders the IntroText component',() => { 
    expect(wrapper.find(IntroText).length).toBe(1); 
    }); 

    it('renders the Form component',() => { 
    expect(wrapper.find(Form).length).toBe(1); 
    }); 
}); 

Вот соответствующая часть моего package.json:

"devDependencies": { 
    "babel-jest": "^18.0.0", 
    "babel-preset-es2015": "^6.22.0", 
    "babel-preset-react": "^6.23.0", 
    "jest": "^18.1.0", 
    "react-scripts": "0.9.0", 
    "react-test-renderer": "^15.4.2" 
}, 
"dependencies": { 
    "enzyme": "^2.7.1", 
    "jest-enzyme": "^2.1.2", 
    "react": "^15.4.2", 
    "react-addons-test-utils": "^15.4.2", 
    "react-dom": "^15.4.2", 
    "react-router": "^3.0.2" 
}, 
"scripts": { 
    "start": "react-scripts start", 
    "build": "react-scripts build", 
    "test": "react-scripts test --env=jsdom", 
    "eject": "react-scripts eject" 
} 

Я получаю эту ошибку, когда тесты запуска:

ReferenceError: wrapper is not defined 

Что мне не хватает?

ответ

11

Вы определяете обертку сопзЬ внутри из beforeEach сферы, переместить его снаружи, как это:

import React from 'react'; 
import { shallow } from 'enzyme'; 
import Home from '../components/Home'; 
import IntroText from '../components/IntroText'; 
import Form from '../components/Form'; 

describe('<Home />',() => { 
    let wrapper; 
    beforeEach(() => { 
    wrapper = shallow(<Home />); 
    }); 

    it('renders the IntroText component',() => { 
    expect(wrapper.find(IntroText).length).toBe(1); 
    }); 

    it('renders the Form component',() => { 
    expect(wrapper.find(Form).length).toBe(1); 
    }); 
}); 

Таким образом, вы будете иметь доступ к обертке внутри в it сек области.

Константы являются блочными областями, как и переменные, определенные с помощью оператора let . Значение константы не может быть изменено с помощью переопределения , и его нельзя переопределить.

Поскольку вы хотите назначить переменную внутри beforeEach сферы и использовать его внутри из it областей, вы должны объявить переменную в общем объеме, что, в данном случае является describe сфера.

Добавлено:

Другой возможный способ исправить это использовать this ключевое слово (который я предпочитаю).

import React from 'react'; 
import { shallow } from 'enzyme'; 
import Home from '../components/Home'; 
import IntroText from '../components/IntroText'; 
import Form from '../components/Form'; 

describe('<Home />', function() { 
    beforeEach(function() { 
    this.wrapper = shallow(<Home />); 
    }); 

    it('renders the IntroText component', function() { 
    expect(this.wrapper.find(IntroText).length).toBe(1); 
    }); 

    it('renders the Form component', function() { 
    expect(this.wrapper.find(Form).length).toBe(1); 
    }); 
}); 
+0

спасибо. Можете ли вы объяснить, почему это так? – jslutzky

+0

обновлен, надеемся, что он станет немного понятнее. – Canastro

+0

Спасибо, очень признателен! – jslutzky

 Смежные вопросы

  • Нет связанных вопросов^_^