1

Trying to use Mocha frameworks with Karma Runner on reactJs application. some reason I have a following error messages :

  Module parse failed: C:\Dev\marvel-memory-card-v2\src\index.scss Unexpected  token (1:0)
  You may need an appropriate loader to handle this file type.

  Uncaught Error: Cannot find module "./index.scss" at tests.webpack.js:22214

Since everything is pretty new to me. No idea How to solve this issue.

Here is my webpack.config files :

"use strict";
var webpack = require('webpack');
var path = require('path');
var loaders = require('./webpack.loaders');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var DashboardPlugin = require('webpack-dashboard/plugin');

const HOST = process.env.HOST || "127.0.0.1";
const PORT = process.env.PORT || "8888";

// global css
loaders.push({
    test: /\.css$/,
    exclude: /[\/\\]src[\/\\]/,
    loaders: [
        'style?sourceMap',
        'css'
    ]
});
// local scss modules
loaders.push({
    test: /\.scss$/,
    exclude: /[\/\\](node_modules|bower_components|public\/)[\/\\]/,
    loaders: [
        'style?sourceMap',
        'css?modules&importLoaders=1&localIdentName=[path]___[name]__[local]___[hash:base64:5]&sourceMap',
        'postcss',
        'sass'
    ]
});

// local css modules
loaders.push({
    test: /\.css$/,
    exclude: /[\/\\](node_modules|bower_components|public\/)[\/\\]/,
    loaders: [
        'style?sourceMap',
        'css?modules&importLoaders=1&localIdentName=[path]___[name]__[local]___[hash:base64:5]&sourceMap'
    ]
});


module.exports = {
    entry: [
        'react-hot-loader/patch',
        './src/index.jsx' // your app's entry point
    ],
    devtool: process.env.WEBPACK_DEVTOOL || 'eval-source-map',
    output: {
        publicPath: '/',
        path: path.join(__dirname, 'public'),
        filename: 'bundle.js'
    },
    resolve: {
        extensions: ['', '.js', '.jsx']
    },
    module: {
        loaders
    },
    devServer: {
        contentBase: "./public",
        // do not print bundle build stats
        noInfo: true,
        // enable HMR
        hot: true,
        // embed the webpack-dev-server runtime into the bundle
        inline: true,
        // serve index.html in place of 404 responses to allow HTML5 history
        historyApiFallback: true,
        port: PORT,
        host: HOST
    },
    plugins: [
        new webpack.NoErrorsPlugin(),
        new webpack.HotModuleReplacementPlugin(),
        new DashboardPlugin(),
        new HtmlWebpackPlugin({
            template: './src/template.html'
        }),
    ]
};

and karma.conf file

var webpack = require('webpack');

module.exports = function (config) {
    config.set({
        browsers: ['Chrome'],
        singleRun: true,
        frameworks: ['mocha'],
        files: [
            'tests.webpack.js'
        ],
        preprocessors: {
            'tests.webpack.js': ['webpack']
        },
        reporters: ['dots'],
        webpack: {
            module: {
                loaders: [
                    {test: /\.jsx?$/, exclude: /node_modules/, loader: 'babel-loader'}
                ]
            },
            watch: true
        },
        webpackServer: {
            noInfo: true
        }
    });
};

Any idea to solve my issue ? Please let me know. Huge Thanks

Danny Kim
  • 809
  • 1
  • 7
  • 15

1 Answers1

0

Try to add this line to your karma configuration:

basePath : __dirname + '/',

and this is the scss loader for webpack:

{
    test: /\.scss$/,
    exclude: /[\/\\](node_modules|bower_components|public\/)[\/\\]/,
    loaders: [
        'style?sourceMap',
        'css?modules&importLoaders=1&localIdentName=[path]___[name]__[local]___[hash:base64:5]&sourceMap',
        'postcss',
        'sass'
    ]
}

So your file should look like this:

module.exports = function (config) {
    config.set({
        basePath : __dirname + '/',
        browsers: ['Chrome'],
        singleRun: true,
        frameworks: ['mocha'],
        files: [
            'tests.webpack.js'
        ],
        preprocessors: {
            'tests.webpack.js': ['webpack']
        },
        reporters: ['dots'],
        webpack: {
            module: {
                loaders: [
                    {test: /\.jsx?$/, exclude: /node_modules/, loader: 'babel-loader'},
                    {
                        test: /\.scss$/,
                        exclude: /[\/\\](node_modules|bower_components|public\/)[\/\\]/,
                        loaders: [
                            'style?sourceMap',
                            'css?modules&importLoaders=1&localIdentName=[path]___[name]__[local]___[hash:base64:5]&sourceMap',
                            'postcss',
                            'sass'
                        ]
                    }
                ]
            },
            watch: true
        },
        webpackServer: {
            noInfo: true
        }
    });
};
Jose Paredes
  • 3,882
  • 3
  • 26
  • 50
  • No luck, Same error message. Do I need to define something for "__dirname"? – Danny Kim Feb 06 '17 at 10:52
  • Actually no! `__dirname` resolves the current directory name where you are at y will update my answer, cause you are missing the scss loader for your webpack module. – Jose Paredes Feb 06 '17 at 11:04
  • Now I have following error : Uncaught Invariant Violation: findAllInRenderedTree(...): instance must be a composite component at tests.webpack.js:919 let me upload my tests.webpack.js . – Danny Kim Feb 06 '17 at 11:22
  • Here is my tests.webpack.js looks like : var context = require.context('./src', true, /-test\.jsx?$/); context.keys().forEach(context); – Danny Kim Feb 06 '17 at 11:25
  • where is your webpack.config located? – Jose Paredes Feb 06 '17 at 11:35
  • webpack.config is at root. See the my structured https://pbs.twimg.com/media/C3-s5q8UcAACQQe.jpg:large – Danny Kim Feb 06 '17 at 11:49
  • @DannyKim I think this issue it's solved! and the error you mentioned is another issue which can be related to this http://stackoverflow.com/questions/34433771/error-invariant-violation-findallinrenderedtree-instance-must-be-a-compo – Jose Paredes Feb 06 '17 at 12:05
  • Thanks heaps. You rock. appreciate it – Danny Kim Feb 06 '17 at 12:20