【问题标题】:Karma won't run (socket.io throwing error)Karma 不会运行(socket.io 抛出错误)
【发布时间】:2017-07-27 03:25:22
【问题描述】:

我有一个 Angular 2 项目,用 Typescript 编写。我正在尝试设置 Travis CI。不幸的是,我收到了来自 Karma 的错误:

socket 上缺少错误处理程序。

TypeError: (msg || "").replace 不是函数

预期行为

我的 Travis CI 构建以完成定义的 Jasmine 单元测试,报告运行次数以及成功与失败。

实际行为

这是我的构建日志的输出。 Here 是完整的构建日志。此外,here 是正在构建的完整 github 存储库。

[09:39:04] Starting 'client.unit_test'...
05 04 2016 09:39:04.281:INFO [karma]: Karma v0.13.22 server started at http://localhost:9876/
05 04 2016 09:39:04.287:INFO [launcher]: Starting browser Chrome
05 04 2016 09:39:05.519:INFO [Chrome 49.0.2623 (Linux 0.0.0)]: Connected on socket /#7wcOJ3uFvZX-HgZeAAAA with id 49035067
Missing error handler on `socket`.
TypeError: (msg || "").replace is not a function
  at /home/travis/build/georgeedwards/Gen-App/node_modules/karma/lib/reporter.js:45:23
  at [object Object].onBrowserError (/home/travis/build/georgeedwards/Gen-App/node_modules/karma/lib/reporters/base.js:58:60)

环境细节

节点 v5.10.0

Angular 2.0.0-beta.12

├── karma@0.13.22 
├── karma-chrome-launcher@0.1.12 
├── karma-coverage@0.2.7 
├── karma-firefox-launcher@0.1.7 
├── karma-ie-launcher@0.1.5 
├── karma-jasmine@0.3.8 
├── karma-ng-html2js-preprocessor@0.1.2 
├── karma-opera-launcher@0.1.0 
├── karma-phantomjs-launcher@0.1.4

任何想法可能导致此问题,或者您可能需要什么信息来调试此问题?

【问题讨论】:

  • @MarcoL 是的,似乎有很多类似的问题,但没有一个解决步骤帮助我解决了这个问题......
  • 我在升级到 Angular CLI 1.0.0-beta.11-webpack.2 时遇到了同样的错误,根据 angular-cli 文档,不需要 angular-cli-build.json 和业力-test-shim.js 应该被删除。源代码可以编译和测试。

标签: node.js angular karma-runner travis-ci


【解决方案1】:

我过去曾遇到过类似的问题。这在 99% 的情况下与应用程序引用的 karma.conf.js 文件数组中未包含文件有关。

另一个可能的问题是模块名称没有从它们各自的文件引用名称正确翻译。

这是来自我的karma-test-shim.js 的 sn-p,我将文件名转换为模块名:

System.config({
    packages: {
        'base/wwwroot/app': {
            defaultExtension: false,
            format: 'register',
            map: Object.keys(window.__karma__.files).
                  filter(function onlyAppFiles(filePath) {
                      return /^\/base\/wwwroot\/app\/.*\.js$/.test(filePath)
                  }).
                  reduce(function createPathRecords(pathsMapping, appPath) {
                      // creates local module name mapping to global path with karma's fingerprint in path, e.g.:
                      var moduleName = appPath.replace(/^\/base\/wwwroot\/app\//, './').replace(/\.js$/, '');
                      pathsMapping[moduleName] = appPath + '?' + window.__karma__.files[appPath];
                      return pathsMapping;
                  }, {})
        }
    }
});

我的项目结构是:

/
 karma.conf.js
 karma-test-shim.js
 wwwroot/
         app/
             //Angular 2 project and spec files

Angular 2 团队的开发人员 Julie Ralph 有一个 seed project 用于为 Angular 2 项目设置 karma 测试,我发现这在创建 karma shim 时非常有用。

【讨论】:

    猜你喜欢
    • 2016-06-24
    • 2017-09-24
    • 2015-05-03
    • 1970-01-01
    • 2017-11-04
    • 2013-04-02
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    相关资源
    最近更新 更多