首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React & Enzyme:为什么beforeEach()不工作?

React & Enzyme:为什么beforeEach()不工作?
EN

Stack Overflow用户
提问于 2017-02-19 02:06:20
回答 1查看 24.1K关注 0票数 21

我正在编写我的第一个React测试,结果遇到了beforeEach语句无法工作的问题。下面是我的测试文件:

代码语言:javascript
复制
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的相关部分

代码语言:javascript
复制
"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"
}

当测试运行时,我得到这个错误:

代码语言:javascript
复制
ReferenceError: wrapper is not defined

我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-19 02:07:30

您在beforeEach作用域中定义了包装器const,将其移到外部,如下所示:

代码语言:javascript
复制
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范围。

补充道(适用于摩卡,但不适用于jest):

另一种可能的解决方法是使用this关键字(如果使用mocha...不能与jest一起工作)。

代码语言:javascript
复制
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);
  });
});
票数 47
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42318799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档