Решить Jest тестовую ошибку из плагина Webpack - PullRequest
0 голосов
/ 29 октября 2019

У меня есть файл конфигурации webpack, который содержит некоторые строки конфигурации, такие как:

const config={
    'accessUrl': 'http://localhost:8000/links',
    'firstAuthUrl': 'http://localhost:8000/firstAccess',
    'baseUrl': '/video?url=',
    'urlRefreshToken': 'http://localhost:8000/refreshAccessToken',
    'loginUrl': 'http://localhost:8000/login',
    'userUrl':'http://localhost:8000/user'
}

module.exports = merge(common, {
    mode: 'development',
    devtool: 'inline-source-map',
    devServer: {
        contentBase: './dist',
        historyApiFallback: true,
        hot: true,
    },
    plugins: [
        new DefinePlugin({
            'config': JSON.stringify(config)
        }),
    ],
});

И это нормально, но когда я добавляю тест jest для одного компонента, который внутри использует config (см. Выше), онне работает, потому что он не распознает конфигурацию.

Часть компонента такова:

<a href={config.baseUrl} className='btn btn-outline-warning justify-content-center mt-5'>

Когда я запускаю приложение, оно работает, но когда я пишу и запускаюtest:

describe('Content Component', () => { 
  const content = shallow(<Content {...props}/>); expect(content.render); 
  expect(content.find('.content')).toBeDefined(); 
})

Когда тестовый прогон скажет: ReferenceError: config is not defined

Как мне решить?

Спасибо всем.

Ответы [ 2 ]

0 голосов
/ 30 октября 2019

Хорошо, я решаю добавить файл setupTest.js, например:

import { configure } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import { shallow, render, mount } from 'enzyme';

configure({ adapter: new Adapter() });


const config = {
    baseUrl:""
};

global.shallow = shallow;
global.render = render;
global.mount = mount;
global.config = config;
0 голосов
/ 30 октября 2019

Jest на самом деле не использовать веб-пакет и его конфигурации. Поэтому DefinePlugin не может предоставить config для Jest и приводит к указанной вами ошибке.

Чтобы исправить ситуацию, вы должны предоставить ту же конфигурацию из DefinePlugin в конфигурации Jest под globals,Ссылка: https://jestjs.io/docs/en/configuration.html#globals-object

Пример jest Конфигурация:

const { jsWithTs: tsjPreset } = require('ts-jest/presets');
module.exports = {
    roots: ['<rootDir>/app'],
    moduleDirectories: ['node_modules', 'app'],
    transform: {
        ...tsjPreset.transform,
    },
    testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$',
    moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json'],
    globals: {
        config: *YOUR_CONFIG_HERE*
    },
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...