简体   繁体   English

Karma 单元测试:尚未为上下文加载模块名称“react”:_。 使用 require([])

[英]Karma unit testing: Module name "react" has not been loaded yet for context: _. Use require([])

I am trying to set up the unit testing framework for react.我正在尝试为 React 设置单元测试框架。 While doing so, the following error has occurred.这样做时,发生了以下错误。 I have searched all over the internet with no solution that is working.我已经在整个互联网上搜索过,但没有任何有效的解决方案。 below are the errors shown and code/packages that I am using.下面是显示的错误和我正在使用的代码/包。

debug error调试错误

04 03 2016 04:48:46.340:DEBUG [phantomjs.launcher]: Error: Module name "react" has not been loaded yet for context: _. Use require([])
http://requirejs.org/docs/errors.html#notloaded


04 03 2016 04:48:46.341:DEBUG [phantomjs.launcher]:   http://localhost:9876/base/node_modules/requirejs/require.js?6f53c895855c3743ac6fb7f99afc63ca5cdfd300:140 in defaultOnError
  http://localhost:9876/base/node_modules/requirejs/require.js?6f53c895855c3743ac6fb7f99afc63ca5cdfd300:544 in onError
  http://localhost:9876/base/node_modules/requirejs/require.js?6f53c895855c3743ac6fb7f99afc63ca5cdfd300:1429 in localRequire
  http://localhost:9876/base/node_modules/requirejs/require.js?6f53c895855c3743ac6fb7f99afc63ca5cdfd300:1791 in requirejs

PhantomJS 2.1.1 (Mac OS X 0.0.0) ERROR
  Error: Module name "react" has not been loaded yet for context: _. Use require([])
  http://requirejs.org/docs/errors.html#notloaded
  at /Users/lebeier/Documents/iMARS/node_modules/requirejs/require.js:140
PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 0 of 0 ERROR (0.053 secs / 0 secs)

node packages节点包

  "dependencies": {
    "bootstrap": "^3.3.6",
    "highcharts": "^4.2.1",
    "history": "^1.17.0",
    "jquery": "^2.2.0",
    "js-cookie": "^2.1.0",
    "react": "^0.14.6",
    "react-bootstrap": "^0.28.2",
    "react-bootstrap-table": "^1.4.5",
    "react-data-components": "^0.6.0",
    "react-dom": "^0.14.6",
    "react-highcharts": "^6.0.0",
    "react-notification-system": "^0.2.6",
    "react-router": "^1.0.3",
    "reactify": "^1.1.1",
    "toastr": "^2.1.2"
  },
  "devDependencies": {
    "babel-core": "^6.6.4",
    "babel-loader": "^6.2.4",
    "babel-preset-es2015": "^6.3.13",
    "babel-preset-react": "^6.3.13",
    "babel-preset-stage-0": "^6.5.0",
    "babelify": "^7.2.0",
    "browserify": "^13.0.0",
    "core-js": "^2.1.3",
    "grunt-template-jasmine-requirejs": "^0.2.3",
    "jasmine": "^2.4.1",
    "karma": "^0.13.21",
    "karma-babel-preprocessor": "^6.0.1",
    "karma-browserify": "^5.0.2",
    "karma-cli": "^0.1.2",
    "karma-coverage": "^0.5.4",
    "karma-jasmine": "^0.3.7",
    "karma-phantomjs-launcher": "^1.0.0",
    "karma-requirejs": "^0.2.5",
    "karma-webpack": "^1.7.0",
    "node-sass": "^3.4.2",
    "phantomjs-prebuilt": "^2.1.4",
    "requirejs": "^2.1.22",
    "uglify": "^0.1.5",
    "watchify": "^3.7.0",
    "webpack": "^1.12.14"
  }

karma.conf.js业力配置文件

module.exports = function(config) {
  config.set({

  // base path that will be used to resolve all patterns (eg. files, exclude)
  basePath: '',

  // frameworks to use
  // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
  frameworks: ['jasmine', 'requirejs'],


  // list of files / patterns to load in the browser
  files: [
      'tests/*.js'
      //{ pattern: 'tests.webpack.js', watched: false }, 
  ],

  // list of files to exclude
  //exclude: [
  //  './node_modules/'
  //],

  plugins: [
    'karma-jasmine',
    'karma-requirejs',
    'karma-phantomjs-launcher',
    'karma-babel-preprocessor',
    'karma-coverage',
    'karma-browserify',
    'karma-webpack'
  ],

  // preprocess matching files before serving them to the browser
  // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
  preprocessors: {
    'core/static/core/js/*.js' : ['babel'],
    'tests/*.js' : ['babel'],
    'tests.webpack.js': [ 'webpack']
  },

  babelPreprocessor:{
    options: {
        presets: ['es2015', 'react'],
        plugins: ["transform-object-rest-spread"],
        sourceMap: 'inline'
    },
    filename: function(file){
        return file.originalPath.replace(/\.js$/, '.es5.js');
    },
    sourceFileName: function(file){
        return file.originalPath;
    }
  },
  // test results reporter to use
  // possible values: 'dots', 'progress'
  // available reporters: https://npmjs.org/browse/keyword/karma-reporter
  reporters: ['dots'],


  // web server port
  port: 9876,


  // enable / disable colors in the output (reporters and logs)
  colors: true,


  // level of logging
  // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
  logLevel: config.LOG_DEBUG,


  // enable / disable watching file and executing tests whenever any file changes
  autoWatch: true,

  // start these browsers
  // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
  browsers: ['PhantomJS'],

  // Continuous Integration mode
  // if true, Karma captures browsers, runs the tests and exits
  singleRun: true,

  // Concurrency level
  // how many browser should be started simultaneous
  concurrency: Infinity,

  webpack: {
    devtool: 'inline-source-map',
    modules: {
        loaders: [
            {
                test: /\.js$/, 
                exclude: /node_modules/, 
                loader: 'babel-loader',
                query:{
                    presets: ['es2015', 'react']
                }
            }
        ],
      },
      watch: true,
    },

    webpackServer: {
      noInfo: true,
    }
  })
}

tests/test.js测试/test.js

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

describe('Testing', ()=>{
    it('sample test', ()=>{
        var v = 2;
        var parts = ['shoulders', 'knees'];
        var lyrics = ['head', ...parts, 'and', 'toes'];
        expect(v).toEqual(2); 
    }); 
});

Help is greatly appreciated!非常感谢帮助!

The error you describe is exactly what RequireJS gives you when you have a require call in the CommonJS form ( require('modX') ) instead of the AMD form ( require(['modX'], function (modX) {...}) ), and the call is done without being wrapped in define .您所描述的错误正是RequireJS给你当你有一个require在CommonJS的形式调用( require('modX')而不是AMD的形式( require(['modX'], function (modX) {...}) ),并且调用完成时没有被包裹在define RequireJS provides some support for using the CommonJS form, but there is a minimum of work that must be done by the developer to ensure that it works. RequireJS 为使用 CommonJS 表单提供了一些支持,但开发人员必须完成最少的工作以确保其工作。 A script that starts with this won't work:以此开头的脚本将不起作用:

var modX = require('modX');
// rest of the module

You get the error message you got.您会收到您收到的错误消息。 You need this instead:你需要这个:

define(function (require) {
    var modX = require('modX');
    // rest of the module
});

What is going on with your setup is that, as it is, Babel is transforming the ES6 modules into something that uses require without the define wrapper.您的设置正在发生的事情是,事实上,Babel 正在将 ES6 模块转换为使用require而不使用define包装器的东西。 In order to get Babel to output proper AMD modules, you need to install babel-plugin-transform-es2015-modules-amd and add transform-es2015-modules-amd to your list of Babel plugins.为了让 Babel 输出正确的 AMD 模块,你需要安装babel-plugin-transform-es2015-modules-amd并将transform-es2015-modules-amd到你的 Babel 插件列表中。 See the documentation here .请参阅 此处的文档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 尚未为上下文加载模块名称“mysql”:_。 使用要求([]) - Module name "mysql" has not been loaded yet for context: _. Use require([]) 尚未为上下文_加载TypeScript导出和导入模块名称。 使用require([]) - TypeScript export and import Module name has not been loaded yet for context: _. Use require([]) 错误:尚未为上下文加载模块名称“@google-cloud/vision”:_。 使用 require([]) - Error: Module name "@google-cloud/vision" has not been loaded yet for context: _. Use require([]) 未捕获的错误:尚未为上下文加载模块名称“@cloudant/cloudant”:_。 在 javascript 中使用 require([]) - Uncaught Error: Module name “@cloudant/cloudant” has not been loaded yet for context: _. Use require([]) in javascript 未捕获的错误:尚未为上下文_加载模块名称“ dist / lib / clientExports”。 使用require([]) - Uncaught Error: Module name “dist/lib/clientExports” has not been loaded yet for context: _. Use require([]) 尚未为上下文加载RequireJS模块名称“ requirejs”。 使用require([]) - RequireJS Module name “requirejs” has not been loaded yet for context. use require([]) “未捕获的错误:尚未为上下文加载模块名称“ gcm”:_。请使用require([]) - “Uncaught Error: Module name ”gcm" has not been loaded yet for context: _. Use require([]) 未捕获的错误:尚未为上下文_加载模块名称“ https”。 使用require([]) - Uncaught Error: Module name “https” has not been loaded yet for context: _. Use require([]) “尚未为上下文加载模块名称:_。 在复杂的Phonegap应用程序中使用require([])”跟踪错误 - “Module name has not been loaded yet for context: _. Use require([])” Tracing Error in Complex Phonegap Application 未捕获的错误:尚未为上下文_加载模块名称“ aaa_bbb_1_pb”。 使用require([]) - Uncaught Error: Module name “aaa_bbb_1_pb” has not been loaded yet for context: _. Use require([])
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM