При тестировании компонента React с помощью Jest выдается ошибка «Не удается найти модуль» - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь протестировать компонент React с помощью Jest.

Код компонента следующий.

import React, { PureComponent } from 'react';
import PropTypes from 'prop-types';
import { Text } from 'components';

class App extends PureComponent {

    static propTypes = {
        name: PropTypes.string.isRequired,
        age: PropTypes.number.isRequired,
        displayed: PropTypes.bool,
    };

    static defaultProps = {
        displayed: true
    };

    render = () => {
        if (!this.props.displayed) {
            return null;
        }
        const text = `${ this.props.name } is ${ this.props.age } years old.`
        return (
            <span>
                <Text
                    text={ text }
                />
            </span>
        );
    }
}

export default App;

Код теста очень прост:

import React from 'react';
import { mount } from 'enzyme';
import App from './../App';

describe('App', () => {
    let props;
    let mountedApp;
    const app = () => {
        if (!mountedApp) {
            mountedApp = mount(
                <App { ...props } />
            );
        }
        return mountedApp;
    };

    beforeEach(() => {
        props = {
            name: 'John',
            age: 35,
            displayed: undefined
        };
        mountedApp = undefined;
    });

    it('always renders a span', () => {
        const spans = app().find('span');
        expect(spans.length).toBeGreaterThan(0);
    });
});

В моем проекте я использую некоторые общие компоненты, такие как текстовый компонент.Все пути к компонентам задаются в файле index.js.

Пример кода файла:

export Button from 'src/Common/Components/Button';
export Text from 'src/Common/Components/Text';
export Breadcrumb from 'src/Common/Components/Breadcrumb';

Это конфигурация Jest, которую я использую в файле package.json.

"jest": {
    "setupTestFrameworkScriptFile": "./Common/Components/setupTests.js",
    "moduleFileExtensions": ["js", "jsx", ""],
    "moduleNameMapper": {
      "components(.*)$": "<rootDir>/Common/Static/index.js"
    }
  }

Конфигурация псевдонима веб-пакета:

псевдоним: {components: path.resolve (__dirname, 'Common / Static / index.js'),},

Я выполняю 'npm test' через терминал, и тест завершается неудачно со следующим сообщением:

Test suite failed to run

    Cannot find module 'src/Common/Components/Button' from 'index.js'

       6 | export Button from 'src/Common/Components/Button';
       7 | export Text from 'src/Common/Components/Text';
    >  8 | export Breadcrumb from 'src/Common/Components/Breadcrumb';
         |                ^

      at Resolver.resolveModule (node_modules/jest-resolve/build/index.js:210:17)
      at Object.<anonymous> (Common/Static/index.js:8:16)

Все пути правильные, и код удаляется, когда я удаляю тест.Я предполагаю, что Jest не может получить пути, включенные в index.js. Есть ли какие-либо предложения о том, как настроить Jest для решения этой проблемы?

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Эта проблема возникла для меня, потому что у проекта были конфигурации в package.json и jest.config.js

package.json

"jest": {
    "moduleNameMapper": {
      "^components(.*)$": "<rootDir>/src/js/components$1",
    }
}

jest.config.js

module.exports = {
    testEnvironment: 'jest-environment-jsdom'
};

package.json moduleNameMapper, похоже, игнорируется.

0 голосов
/ 31 мая 2018

Я думаю, что добавление пути к модулю в вашу конфигурацию jest будет делать то, что вы хотите

jest.config.js

module.exports = {
    "modulePaths": [
        "src",
        "test"
    ],
    ...
}

edit: О, ваша конфигурация jest находится в package.json, поэтому ее лучше добавить в вашу запись jest

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...