Karma 测试与 ES6/Babel 反应

Karma Testing React with ES6/Babel

我正在尝试使用 webpack babel-loader 使用 karma 作为我的测试运行器来测试我的项目。代码全部构建成功(我想?或者 CLI 说它成功了,但是当我打开浏览器时,所有文件在 es6 导入时立即失败。知道我做错了什么吗?

var path = require('path');

module.exports = function(config) {
    config.set({
    basePath: '',
    // frameworks: ['jasmine', 'karma-webpack'],

    files: [
        'lib/bundle.js'
    ],

    exclude: ['*.styl'],

    preprocessors: {
        'test/**/*.js': ['webpack'],
        'test/**/*.jsx': ['webpack'],
        'src/**/*.jsx': ['webpack'],
        'src/**/*.js': ['webpack']
    },

    plugins: [
        require("karma-webpack")
    ],

    webpack: {
        entry: './src/entry.js',
         module: {
             loaders: [
                {
                    test: path.join(__dirname, 'src'),  
                    loader: 'babel-loader?stage=0&optional=runtime',
                    excludes: /node_modules/,
                    options: {
                        optional: ['runtime']
                    }
                }, 
                {
                    test: /\.styl$/,
                    loaders: ['style-loader', 'css-loader', 'stylus-loader']
                }
            ]
        },
        webpackMiddleware: {
          noInfo: true
        }
    }
});
};

10 11 2015 13:16:47.156:INFO [karma]: 延迟执行,这些浏览器还没有准备好:Chrome 46.0.2490 (Windows 8.1 0.0.0) Chrome 46.0.2490 (Windows 8.1 0.0.0) 错误 您需要包含一些实现 karma.start 方法的适配器!

Chrome 46.0.2490 (Windows 8.1 0.0.0) 错误 您需要包含一些实现 karma.start 方法的适配器!

您在测试中包含了转译后的文件。例如,请参阅错误中的这一行:

WARNING in ./~/routes/dist/routes.js
Critical dependencies:
1:406-413 This seems to be a pre-built javascript file. Though this is possible, it's not recommended. Try to require the original source to get better results.
@ ./~/routes/dist/routes.js 1:406-413

为什么包含 dist 文件?您应该只包含 src 个文件和依赖项。

files: [
    '../node_modules/react/react.js',
    '../node_modules/babel-polyfill/dist/polyfill.js',
    '**/*.js',
    '**/*.jsx'
],

最后两个看起来不对。你告诉它加载所有 js/jsx 文件..包括 dist 文件。

这是有效的最终文件。

我做错了两件事(下面评论中指出的 1 件事):

  1. 我正在向文件数组添加未转译的代码,这当然会在浏览器中中断。从 Karma 的文档中,“文件是要在浏览器中加载的 files/patterns 的列表,”所以它当然在 es6 令牌上的 jsx 上崩溃了。

  2. 我没有选择 jasmine 作为我的框架,所以 Karma 运行ner 不知道从哪里开始,这就是为什么我得到启动方法错误的原因。

  3. 最后,我需要将我的测试包含在文件数组中,否则 Karma 将不会加载我的测试和 运行 它们。 (注意:测试也必须包含在预处理器数组中)。

    var path = require('path');
    
    module.exports = function(config) {
    
    config.set({
    
        basePath: '',
        frameworks: ['jasmine'],
    
        files: [
            'lib/bundle.js',
            'test/**/*.jsx',
            'test/**/*.js'
        ],
    
        exclude: ['*.styl'],
    
        preprocessors: {
            'test/**/*.js': ['webpack'],
            'test/**/*.jsx': ['webpack'],
            'src/**/*.jsx': ['webpack'],
            'src/**/*.js': ['webpack']
        },
    
        webpack: {
            entry: './src/entry.js',
            module: {
                 loaders: [
                    {
                        test: /\.js$|.jsx$/,
                        loader: 'babel-loader?stage=0&optional=runtime',
                        excludes: /node_modules/
                    }, 
                    {
                        test: /\.styl$/,
                        loaders: ['style-loader', 'css-loader', 'stylus-loader']
                    }
                ]
            },
            webpackMiddleware: {
              noInfo: true
            }
        }
    });
    };