官术网_书友最值得收藏!

Extracting a test helper

The Git tag for this section is extracting-helpers. It contains solutions to the exercises from the previous chapter, so if you haven't completed the Exercises section yourself, then you should move to this tag now so that you're up to date.

For more detailed instructions, see the To get the most out of this book section in the Preface.

In the first chapter, our test suites shared common code for constructing a DOM container element before each test. This element was used as the React root element. By doing this for each test, we avoided modifying global state. Let's extract that code so that we can re-use it across all of our test suites.

The shared code can be split into four parts:

  • A common declaration of container in the describe block, accessible by all tests
  • A beforeEach call to set container to a newly constructed container element
  • A render function to insert DOM elements into the container
  • Various expectations on the container to verify its content

At first glance, it might seem difficult to extract this logic since the container variable is manipulated in both a beforeEach block and each of our test functions. However, it's possible if we use a higher-order function that encapsulates its own state.

Create a new file test/domManipulators.js, and add the following content:

import ReactDOM from 'react-dom';

export const createContainer = () => {
const container = document.createElement('div');

return {
render: component => ReactDOM.render(component, container),
container
};
};

Calling domManipulators creates an empty DOM element, container, and then returns an object with two properties: render and container. We'll see how these can be used in the next section.

主站蜘蛛池模板: 册亨县| 开平市| 滦平县| 仁寿县| 曲麻莱县| 闸北区| 徐闻县| 江西省| 阿荣旗| 宾阳县| 阳原县| 任丘市| 罗江县| 洛川县| 罗江县| 灌云县| 台南市| 五指山市| 德安县| 长治市| 渭源县| 河源市| 阿拉善右旗| 静乐县| 巴南区| 盐池县| 乐安县| 大港区| 南召县| 扎兰屯市| 宁明县| 阜新市| 龙泉市| 丁青县| 太原市| 利辛县| 丹寨县| 交口县| 章丘市| 屏南县| 金秀|