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

Rendering React from a test

In order to make this test pass, we'll have to write some code above the expectation that will call into our production code.

Since we're testing what happens when a React component is rendered, we'll need to call the ReactDOM.render function. This function takes a component (which in our case will be called Appointment), performs the React render magic, and replaces an existing DOM node with the newly rendered node tree. The DOM node it replaces is known as the React container.

Here's the method signature:

ReactDOM.render(component, container)

In order to call this in our test, we'll need to define both component and container. Let's piece the test together before we write it out in full. It will have this shape:

it('renders the customer first name', () => {
const component = ???
const container = ???
ReactDOM.render(component, container);
expect(document.body.textContent).toMatch('Ashley');
});

Since we're rendering Appointment, we know what we need to put for component. It's a JSX fragment that takes our customer as a prop:

 const customer = { firstName: 'Ashley' };
const component = <Appointment customer={customer} />;
Back when we were considering our design, we came up with a whole object format for our appointments. You might think the definition of a customer here is very sparse, as it only contains a first name. But we don't need anything else for a test about customer names.

What about container? We can use the DOM to create a container element:

const container = document.createElement('div');
document.body.appendChild(container);

Now let's take a look at that test in full. Change your test in test/Appointments.test.js to match the following:

it('renders the customer first name', () => {
const customer = { firstName: 'Ashley' };
const component = <Appointment customer={customer} />;
const container = document.createElement('div');
document.body.appendChild(container);

ReactDOM.render(component, container);

expect(document.body.textContent).toMatch('Ashley');
});

As we're using both ReactDOM and JSX, we'll need to include the two standard React import at the top of our test file for this to work, as follows:

import React from 'react';
import ReactDOM from 'react-dom';

Go ahead and run the test. Within the output, you'll see the following:

ReferenceError: Appointment is not defined

This is subtly different from the test failure we saw previously. This is a run-time exception, not an expectation failure. Thankfully, though, the exception is telling us exactly what we need to do, just as a test expectation would. We need to define Appointment.

主站蜘蛛池模板: 满洲里市| 海林市| 蓝田县| 建阳市| 华亭县| 克什克腾旗| 吉木萨尔县| 金坛市| 漯河市| 郑州市| 鲁甸县| 独山县| 宝鸡市| 修武县| 利辛县| 隆尧县| 银川市| 仪陇县| 南靖县| 搜索| 玉溪市| 海丰县| 法库县| 沙田区| 如皋市| 阿克苏市| 晋宁县| 岢岚县| 札达县| 莱州市| 徐水县| 青冈县| 牙克石市| 监利县| 巨鹿县| 浮梁县| 西林县| 泗洪县| 化州市| 宜君县| 阜平县|