Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Jest运行时,被调用函数具有未定义的参数_Javascript_Reactjs_Jestjs - Fatal编程技术网

Javascript 使用Jest运行时,被调用函数具有未定义的参数

Javascript 使用Jest运行时,被调用函数具有未定义的参数,javascript,reactjs,jestjs,Javascript,Reactjs,Jestjs,有人遇到过同样的问题吗? 我正在用babeljest运行jest,并在jest.config.js中配置了正确的网页别名 但是当我运行测试时,我看到了下一个行为 导入的历史对象在index.js中正确定义,并作为参数传递给configureStore{history}函数 但在函数内部,它变得未定义。使用调试器检查多次 我试图通过jest.disableAutomock甚至在jest.config.js中禁用所有mock,但什么也没发生。我仍然看到这种行为。很明显,稍后当代码试图执行histor

有人遇到过同样的问题吗? 我正在用babeljest运行jest,并在jest.config.js中配置了正确的网页别名

但是当我运行测试时,我看到了下一个行为 导入的历史对象在index.js中正确定义,并作为参数传递给configureStore{history}函数

但在函数内部,它变得未定义。使用调试器检查多次

我试图通过jest.disableAutomock甚至在jest.config.js中禁用所有mock,但什么也没发生。我仍然看到这种行为。很明显,稍后当代码试图执行history.location时,我得到了一个异常,因为它是未定义的

// For a detailed explanation regarding each configuration property, visit:
// https://jestjs.io/docs/en/configuration.html

module.exports = {
  collectCoverage: false,
  coverageDirectory: '<rootDir>/coverage',
  verbose: true,
  setupFiles: ['<rootDir>/__mocks__/setupJest.js'],
  transform: {
    '\\.(jpg|jpeg|png|gif|webp|svg|ttf|woff|woff2|)$': '<rootDir>/__mocks__/fileTransformer.js',

    '^.+\\.js$': 'babel-jest'
  },
  globals: {
    NODE_ENV: 'test',
    APP_ENV: 'test',
    GIT_VERSION: 1
  },
  coveragePathIgnorePatterns: [
    '<rootDir>/node_modules'
  ],
  modulePaths: ['<rootDir>/js'],
  moduleFileExtensions: ['js', 'css'],
  moduleDirectories: ['node_modules'],

  modulePathIgnorePatterns: ['<rootDir>/public'],

  moduleNameMapper: {
    '^.+\\.css$': 'identity-obj-proxy',

    '^common-styles(.*)$': '<rootDir>/public/styles$1',
    '^styles(.*)$': '<rootDir>/js/styles$1',
    '^reducers(.*)$': '<rootDir>/js/reducers$1',
    '^store(.*)$': '<rootDir>/js/store$1',
    '^middlewares(.*)$': '<rootDir>/js/middlewares$1',
    '^newComponents(.*)$': '<rootDir>/js/newComponents$1',
    '^components(.*)$': '<rootDir>/js/components$1',
    '^containers(.*)$': '<rootDir>/js/containers$1',
    '^layouts(.*)$': '<rootDir>/js/layouts$1',
    '^routes(.*)$': '<rootDir>/js/routes$1',
    '^pages(.*)$': '<rootDir>/js/pages$1',
    '^sagas(.*)$': '<rootDir>/js/sagas$1',
    '^services(.*)$': '<rootDir>/js/services$1',
    '^utils(.*)$8': '<rootDir>/js/utils$1',
    '^hocs(.*)$': '<rootDir>/js/hocs$1',
    '^hooks(.*)$': '<rootDir>/js/hooks$1',
    '^locales(.*)$': '<rootDir>/js/locales$1',
    '^api(.*)$': '<rootDir>/js/api$1',
    '^schemas(.*)$': '<rootDir>/js/utils/schemas$1',
    '^constants(.*)$': '<rootDir>/js/constants$1',
    '^src/featureToggles$': '<rootDir>/js/featureToggles.json',
    '^src$': '<rootDir>/js',
    '^src/(.*)$': '<rootDir>/js/$1'
  },
  transformIgnorePatterns: ['<rootDir>/node_modules/']
}

测试本身

import { alphabeticalSortWithProp } from 'routes/CustomerContent/helpers'

test('sorts objects by property desc', () => {
  const entries = [{ name: 'A' }, { name: 'B' }, { name: 'C' }]
  const expected = [{ name: 'C' }, { name: 'B' }, { name: 'A' }]
  const result = alphabeticalSortWithProp('name', 'desc')(entries)

  expect(expected).toEqual(result)
})
测试文件

import { ROOT_FOLDER_ID } from 'constants/common'
import * as R from 'ramda'
import { history } from 'utils/history'

export const alphabeticalSortWithProp = (propName, type) =>
  R.compose(
    R.sort,
    sortStrategy(type),
    sortNormalization
  )(propName)

历史文件

import { createBrowserHistory } from 'history'
import { globalDispatch } from 'src/index'
import { showRouteLeaveWarning } from 'utils/actions'

export const history = createBrowserHistory({
  getUserConfirmation: (message, callback) => globalDispatch(showRouteLeaveWarning({
    cancelHandler: () => callback(false),
    submitHandler: () => callback(true)
  }))
})
以及包含globalDispatch的index.js

import 'locales'

/* global GIT_VERSION */

import React from 'react'
import { render } from 'react-dom'
import { Provider } from 'react-redux'
import { ConnectedRouter } from 'connected-react-router'
import sagaMiddleware from 'middlewares/sagaMiddleware'
import rootSaga from 'sagas'
import configureStore from 'store/configureStore'
import { AppContainer } from 'react-hot-loader'
import { initializeAnalytycs } from 'utils/analytics/init'
import { history } from 'utils/history'
import GlobalStyles from 'utils/styles/global'
import * as Sentry from '@sentry/browser'
import { ERROR_SETTINGS } from 'utils/sentry'

import 'normalize.css'
import 'flexboxgrid/dist/flexboxgrid.css'
import 'react-select/dist/react-select.css'
import 'swiper/dist/css/swiper.min.css'
import 'common-styles/fonts.css'
import 'common-styles/tooltip.css'
import 'common-styles/safari.css'
import 'common-styles/slider.css'
import 'common-styles/react_slick_custom.css'
import 'rc-slider/assets/index.css'
import 'rc-tooltip/assets/bootstrap.css'
import 'react-datepicker/dist/react-datepicker.css'
import 'react-spinner/react-spinner.css'

import BootStrapApp from './BootStrapApp.js'

// initialize raven for reporting the uncaught exception to sentry for all the env except development
if (!['development', 'test'].includes(process.env.APP_ENV)) {
  Sentry.init({
    dsn: process.env.SENTRY_KEY,
    environment: process.env.APP_ENV,
    release: GIT_VERSION,
    ...ERROR_SETTINGS
  })
}

const store =
  window.Store ||
  configureStore(
    {
      history
    },
    window.__initialState__
  )

window.Store = store

export const globalDispatch = store.dispatch

sagaMiddleware.run(rootSaga)

initializeAnalytycs()

if (module.hot) module.hot.accept()

const renderApp = RootComponent => {
  render(
    <AppContainer>
      <Provider store={store}>
        <ConnectedRouter history={history}>
          <RootComponent />
          <GlobalStyles />
        </ConnectedRouter>
      </Provider>
    </AppContainer>,
    document.getElementById('app')
  )
}

renderApp(BootStrapApp)


您能复制粘贴测试代码和测试代码吗。这将更容易看出way@litelite添加了可能影响测试的所有依赖项。因此,实际上,您可以在index.js中看到以下行const store=window.store | | configureStore{history},window.u initialState_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。
import 'locales'

/* global GIT_VERSION */

import React from 'react'
import { render } from 'react-dom'
import { Provider } from 'react-redux'
import { ConnectedRouter } from 'connected-react-router'
import sagaMiddleware from 'middlewares/sagaMiddleware'
import rootSaga from 'sagas'
import configureStore from 'store/configureStore'
import { AppContainer } from 'react-hot-loader'
import { initializeAnalytycs } from 'utils/analytics/init'
import { history } from 'utils/history'
import GlobalStyles from 'utils/styles/global'
import * as Sentry from '@sentry/browser'
import { ERROR_SETTINGS } from 'utils/sentry'

import 'normalize.css'
import 'flexboxgrid/dist/flexboxgrid.css'
import 'react-select/dist/react-select.css'
import 'swiper/dist/css/swiper.min.css'
import 'common-styles/fonts.css'
import 'common-styles/tooltip.css'
import 'common-styles/safari.css'
import 'common-styles/slider.css'
import 'common-styles/react_slick_custom.css'
import 'rc-slider/assets/index.css'
import 'rc-tooltip/assets/bootstrap.css'
import 'react-datepicker/dist/react-datepicker.css'
import 'react-spinner/react-spinner.css'

import BootStrapApp from './BootStrapApp.js'

// initialize raven for reporting the uncaught exception to sentry for all the env except development
if (!['development', 'test'].includes(process.env.APP_ENV)) {
  Sentry.init({
    dsn: process.env.SENTRY_KEY,
    environment: process.env.APP_ENV,
    release: GIT_VERSION,
    ...ERROR_SETTINGS
  })
}

const store =
  window.Store ||
  configureStore(
    {
      history
    },
    window.__initialState__
  )

window.Store = store

export const globalDispatch = store.dispatch

sagaMiddleware.run(rootSaga)

initializeAnalytycs()

if (module.hot) module.hot.accept()

const renderApp = RootComponent => {
  render(
    <AppContainer>
      <Provider store={store}>
        <ConnectedRouter history={history}>
          <RootComponent />
          <GlobalStyles />
        </ConnectedRouter>
      </Provider>
    </AppContainer>,
    document.getElementById('app')
  )
}

renderApp(BootStrapApp)