Jacques
Jacques

Reputation: 3774

Karma/systemjs not looking in node_modules directory when trying to run tests

I'm trying to run tests using karma/jasmine/systemjs with Angular 2 and typescript. I previously had it working without systemjs/typescript using babel.

I also got it working transpiling typescript to es6 and using the same karma setup without using systemjs.

I want to use systemjs, and I don't want to have to do transpile twice, so now I'm trying to use systemjs with karma. (using karma-system.js).

The error I'm getting is:

Error: XHR error (404 Not Found) loading /path/to/project/angular2/core.js

For whatever reason, karma/systemjs is not looking in the node_modules directory for angular, and I don't want to hard code that into my project files.

karma.conf.js:

module.exports = function(config) {
  config.set({
    basePath: '',

    plugins: ['karma-systemjs', 'karma-jasmine', 'karma-chrome-launcher'],
    frameworks: ['systemjs', 'jasmine'],

    files: [
      'client/**/*.spec.js',
      'client/**/**/*.spec.js',
      'server/**/*.spec.js',
      'server/**/**/*.spec.js'
    ],

    exclude: [
        'node_modules/',
        'client/node_modules/*',
        'client/node_modules/**/*.spec.js',
        'server/node_modules/*'
    ],

    preprocessors: {},

    systemjs: {
        configFile: 'system.conf.js',
        serveFiles: [
            'client/**/*.js',
            'server/**/*.js',
        ],
        config: {
            defaultJSExtensions: true
        }
    },
    reporters: ['progress'],
    port: 9876,
    colors: true,
    logLevel: config.LOG_DEBUG,
    autoWatch: false,
    browsers: ['Chrome'],
    singleRun: false,
    concurrency: Infinity
  })
}

system.conf.js

System.config({
    paths: {
        'systemjs': 'node_modules/systemjs/dist/system.js',
        'system-polyfills': 'node_modules/systemjs/dist/system-polyfills.js',
        'es6-module-loader': 'node_modules/es6-module-loader/dist/es6-module-loader.js'
    }
});

In my typescript file, I'm loading angular core like this.

import { Component, View } from 'angular2/core';

and it gets transpiled to:

System.register(['angular2/core'], function(exports_1) {

I have tried adding a baseUrl to my systemjs config, it does not seem to do anything.

I have been "googling" and searching stack for a few hours now. I've looked at How to configure karma and systemjs to run tests for angular ES6 transpiled by traceur into amd format ES5 modules and Angular and ES6: Karma Testing with SystemJS and still have not fixed the issue.

Upvotes: 2

Views: 2166

Answers (1)

hmd.ai
hmd.ai

Reputation: 1171

in your system.conf.js file you should define a path for all angular modules like this:

System.config({
    paths: {
        'angular2/*': 'node_modules/angular2/bundles/*.js',
    }
});

Upvotes: 2

Related Questions