Как проверить компоненты, которые отрисовывают куски SVG? - PullRequest
0 голосов
/ 31 января 2019

Я довольно новый, чтобы реагировать.Я пишу компоненты, которые будут использоваться в теге <svg>.

Я хотел бы иметь тесты для этих компонентов.Однако во всех моих тестах не распознаются действительные потомки <svg>, например, <path>, <rect> и <circle> и т. Д.

import React from 'react';
import ReactDOM from 'react-dom';
import { Layout } from './Layout';
import { LayoutAlignmentHorizontal, LayoutAlignmentVertical, LayoutFlow } from './Layout.enum';


it('renders without crashing', () => {
  const svg = document.createElement('svg');
  svg.setAttribute('xmlns','http://www.w3.org/2000/svg');
    ReactDOM.render(<Layout flow={LayoutFlow.COLUMN}
                            horizontalAlignment={LayoutAlignmentHorizontal.LEFT}
                            verticalAlignment={LayoutAlignmentVertical.TOP}>
      <rect width={50} height={50} fill={'red'}/>
      <circle r={15} fill={'blue'} transform="translate(15 15)"/>
      <path transform="scale(.15)"
            d="M 10,30 A 20,20 0,0,1 50,30
               A 20,20 0,0,1 90,30
               Q 90,60 50,90
               Q 10,60 10,30 z"
            fill={'green'}/>
    </Layout>, svg);
  ReactDOM.unmountComponentAtNode(svg);
});

Факт:

$ react-scripts test
 FAIL  src/containers/layout/Layout.test.tsx
  ● Console

    console.error node_modules/react-dom/cjs/react-dom.development.js:506
      Warning: The tag <rect> is unrecognized in this browser. If you meant to render a React component, start its name with an uppercase letter.
          in rect (at Layout.test.tsx:11)
          in g (at Layout.tsx:60)
          in g (at Layout.tsx:71)
          in Layout (at Layout.test.tsx:10)
    console.error node_modules/react-dom/cjs/react-dom.development.js:506
      Warning: The tag <g> is unrecognized in this browser. If you meant to render a React component, start its name with an uppercase letter.
          in g (at Layout.tsx:60)
          in g (at Layout.tsx:71)
          in Layout (at Layout.test.tsx:10)
    console.error node_modules/react-dom/cjs/react-dom.development.js:506
      Warning: The tag <circle> is unrecognized in this browser. If you meant to render a React component, start its name with an uppercase letter.
          in circle (at Layout.test.tsx:12)
          in g (at Layout.tsx:60)
          in g (at Layout.tsx:71)
          in Layout (at Layout.test.tsx:10)
    console.error node_modules/react-dom/cjs/react-dom.development.js:506
      Warning: The tag <path> is unrecognized in this browser. If you meant to render a React component, start its name with an uppercase letter.
          in path (at Layout.test.tsx:13)
          in g (at Layout.tsx:60)
          in g (at Layout.tsx:71)
          in Layout (at Layout.test.tsx:10) 

Ожидается: svg-теги должны отображаться

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

У меня была эта проблема с использованием компонента SVG в моем наборе тестов Jest.

FWIW, вы можете просто обернуть компонент с помощью <svg>, чтобы тесты Jest прошли:

test('something', () => {
  mount(<svg><MySVGComponent /></svg>)
})
0 голосов
/ 02 февраля 2019

Благодаря комментарию DoMiNeLa10 .

React должен отобразить элемент <svg>, тогда он работает:)

it('renders without crashing', () => {
  const div = document.createElement('div');
    ReactDOM.render(<svg xmlns="http://www.w3.org/2000/svg">
      <Layout flow={LayoutFlow.COLUMN}
                  horizontalAlignment={LayoutAlignmentHorizontal.LEFT}
                  verticalAlignment={LayoutAlignmentVertical.TOP}>
        <rect width={50} height={50} fill={'red'}/>
        <circle r={15} fill={'blue'} transform="translate(15 15)"/>
        <path transform="scale(.15)"
              d="M 10,30 A 20,20 0,0,1 50,30
                 A 20,20 0,0,1 90,30
                 Q 90,60 50,90
                 Q 10,60 10,30 z"
              fill={'green'}/>
      </Layout>
    </svg>, div);
  ReactDOM.unmountComponentAtNode(div);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...