Karma JSPM可怕的跟踪日志

Tim*_*hle 9 angularjs karma-jasmine systemjs es6-promise jspm

我一直在我的angularjs 1.5和jspm设置上设置karma和jasmine.首先来自karma的所有错误跟踪日志都来自systemjs,这使得调试变得更加困难.即使我的所有承诺都处理拒绝,我也会收到很多可能未处理的拒绝消息.

ERROR LOG: 'Potentially unhandled rejection [5] 
tryCatchReject@http://localhost:9020/base/jspm_packages/system-polyfills.src.js?3aa57969dce4ecea4c51aab540f372d15cc886b6:1252:34
runContinuation1@http://localhost:9020/base/jspm_packages/system-polyfills.src.js?3aa57969dce4ecea4c51aab540f372d15cc886b6:1211:18
when@http://localhost:9020/base/jspm_packages/system-polyfills.src.js?3aa57969dce4ecea4c51aab540f372d15cc886b6:999:20
run@http://localhost:9020/base/jspm_packages/system-polyfills.src.js?3aa57969dce4ecea4c51aab540f372d15cc886b6:1109:28
_drain@http://localhost:9020/base/jspm_packages/system-polyfills.src.js?3aa57969dce4ecea4c51aab540f372d15cc886b6:166:22
drain@http://localhost:9020/base/jspm_packages/system-polyfills.src.js?3aa57969dce4ecea4c51aab540f372d15cc886b6:131:15'
ERROR LOG: 'Potentially unhandled rejection [6] 
tryCatchReject@http://localhost:9020/base/jspm_packages/system-polyfills.src.js?3aa57969dce4ecea4c51aab540f372d15cc886b6:1252:34
runContinuation1@http://localhost:9020/base/jspm_packages/system-polyfills.src.js?3aa57969dce4ecea4c51aab540f372d15cc886b6:1211:18
when@http://localhost:9020/base/jspm_packages/system-polyfills.src.js?3aa57969dce4ecea4c51aab540f372d15cc886b6:999:20
run@http://localhost:9020/base/jspm_packages/system-polyfills.src.js?3aa57969dce4ecea4c51aab540f372d15cc886b6:1109:28
_drain@http://localhost:9020/base/jspm_packages/system-polyfills.src.js?3aa57969dce4ecea4c51aab540f372d15cc886b6:166:22
drain@http://localhost:9020/base/jspm_packages/system-polyfills.src.js?3aa57969dce4ecea4c51aab540f372d15cc886b6:131:15'

  MyService
      ? should do the thing
    Expected 3 to equal 2.
    tryCatchReject@/var/www/html/loyaltyone/src/jspm_packages/system-polyfills.src.js:1252:34
    runContinuation1@/var/www/html/loyaltyone/src/jspm_packages/system-polyfills.src.js:1211:18
    when@/var/www/html/loyaltyone/src/jspm_packages/system-polyfills.src.js:999:20
    run@/var/www/html/loyaltyone/src/jspm_packages/system-polyfills.src.js:890:17


PhantomJS 2.1.1 (Linux 0.0.0): Executed 46 of 46 (1 FAILED) (0.205 secs / 0.028 secs)
Run Code Online (Sandbox Code Playgroud)

我有办法有更好的跟踪日志与错误?

Dou*_*low 0

我也看到了同样的Potentially unhandled rejection...错误。他们太糟糕了而且完全没有帮助。我为调试问题所做的是将 phantomjs 置于调试模式,并debugger;在错误中引用的代码行之前放置一条语句,然后我能够单步执行并找到我遇到的确切问题。

在您的例子中,错误是在 的第 1252 行抛出的jspm_packages/system-polyfills.src.js,其中是一个 method tryCatchReject。我会debugger;像这样放置一个语句,然后在调试时查看值e.message

    /**
     * Return f.call(thisArg, x), or if it throws return a rejected promise for
     * the thrown exception
     */
    function tryCatchReject(f, x, thisArg, next) {
        try {
            next.become(getHandler(f.call(thisArg, x)));
        } catch(e) {
            debugger;
            next.become(new Rejected(e));
        }
    }
Run Code Online (Sandbox Code Playgroud)

karma -phantomjs-launcher 自述文件提供了一个很好的示例,说明如何配置 Karma 以将正确的标志传递给 phantomjs 进行调试,以及一些很好的说明:

// karma.conf.js
module.exports = function(config) {
  config.set({
    browsers: ['PhantomJS', 'PhantomJS_custom'],

    // you can define custom flags
    customLaunchers: {
      'PhantomJS_custom': {
        base: 'PhantomJS',
        options: {
          windowName: 'my-window',
          settings: {
            webSecurityEnabled: false
          },
        },
        flags: ['--load-images=true'],
        debug: true
      }
    },

    phantomjsLauncher: {
      // Have phantomjs exit if a ResourceError is encountered (useful if karma exits without killing phantom)
      exitOnResourceError: true
    }
  })
}
Run Code Online (Sandbox Code Playgroud)

如果将调试选项设置为 true,系统将指示您启动 Web 浏览器来调出调试器。请注意,您将需要放置调试器;JavaScript 中的语句来命中断点。您应该能够在测试代码和客户端代码中放置断点。请注意,调试选项会自动将 --remote-debugger-port=9000 和 --remote-debugger-autorun=yes 开关添加到 PhantomJS。

当您开始运行测试时,您应该会看到导航到http://localhost:9000/webkit/inspector/inspector.html?page=2 的提示。您可以在此处启用调试并单步调试代码。