Karma/systemjs 尝试 运行 测试时未查看 node_modules 目录

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

我正在尝试 运行 使用 karma/jasmine/systemjs 与 Angular 2 和打字稿进行测试。我以前在没有 systemjs/typescript 使用 babel 的情况下工作。

我还可以将打字稿转译为 es6 并在不使用 systemjs 的情况下使用相同的 karma 设置。

我想使用 systemjs,我不想做两次转译,所以现在我正在尝试将 systemjs 与 karma 一起使用。 (使用业力-system.js)。

我得到的错误是:

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

出于某种原因,karma/systemjs 没有在 node_modules 目录中查找 angular,我不想将其硬编码到我的项目文件中。

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'
    }
});

在我的打字稿文件中,我正在像这样加载 angular 核心。

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

它被转译为:

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

我已经尝试将 baseUrl 添加到我的 systemjs 配置中,它似乎没有任何作用。

我已经 "googling" 搜索堆栈几个小时了。我查看了 How to configure karma and systemjs to run tests for angular ES6 transpiled by traceur into amd format ES5 modules and ,但仍未解决问题。

在您的 system.conf.js 文件中,您应该为所有 angular 模块定义一个路径,如下所示:

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