2016-11-22 71 views
1

我在Webstorm中创建了一个Angular-CLI项目,我试图确保所有的测试都在运行。它启动Chrome浏览器,但不报告任何内容。所以我在第一个block中修改了app.component.spec.ts来添加一个console.log语句,该语句不会登录到控制台。Angular-cli没有运行spec.ts文件

它不会报告任何内容或给出任何错误,直到我手动关闭Chrome(出于某种原因,即使我将其设置为只运行一次,但不会自行关闭)。它也不显示console.log语句。

Karma.config在Chrome关闭

 
// Karma configuration file, see link for more information 
// https://karma-runner.github.io/0.13/config/configuration-file.html 

module.exports = function (config) { 
    config.set({ 
    basePath: '', 
    frameworks: ['jasmine', 'angular-cli'], 
    plugins: [ 
     require('karma-jasmine'), 
     require('karma-chrome-launcher'), 
     require('karma-remap-istanbul'), 
     require('angular-cli/plugins/karma') 
    ], 
    files: [ 
     { pattern: './src/*/*.spec.ts', watched: false } 
    ], 
    preprocessors: { 
     './src/test.ts': ['angular-cli'] 
    }, 
    mime: { 
     'text/x-typescript': ['ts','tsx'] 
    }, 
    remapIstanbulReporter: { 
     reports: { 
     html: 'coverage', 
     lcovonly: './coverage/coverage.lcov' 
     } 
    }, 
    angularCli: { 
     config: './angular-cli.json', 
     environment: 'dev' 
    }, 
    reporters: config.angularCli && config.angularCli.codeCoverage 
       ? ['progress', 'karma-remap-istanbul'] 
       : ['progress'], 
    port: 9876, 
    colors: true, 
    logLevel: config.LOG_INFO, 
    autoWatch: false, 
    browsers: ['Chrome'], 
    singleRun: true 
    }); 
}; 

错误:

 
22 11 2016 10:01:27.657:ERROR [karma]: TypeError: Cannot read property 'map' of undefined 
    at ProgressReporter._render (C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\karma\lib\reporters\progress.js:53:26) 
    at ProgressReporter.writeCommonMsg (C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\karma\lib\reporters\progress.js:9: 
44) 
    at ProgressReporter.BaseReporter.onBrowserError (C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\karma\lib\reporters\b 
ase.js:63:10) 
    at Server. (C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\karma\lib\events.js:13:22) 
    at emitTwo (events.js:111:20) 
    at Server.emit (events.js:191:7) 
    at disconnect (C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\karma\lib\browser.js:40:13) 
    at Browser.onDisconnect (C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\karma\lib\browser.js:157:7) 
    at Socket. (C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\karma\lib\events.js:13:22) 
    at emitOne (events.js:96:13) 
    at Socket.emit (events.js:188:7) 
    at Socket.emit (C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\socket.io\lib\socket.js:128:10) 
    at Socket.onclose (C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\socket.io\lib\socket.js:425:8) 
    at Client.onclose (C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\socket.io\lib\client.js:232:24) 
    at emitTwo (events.js:111:20) 
    at Socket.emit (events.js:191:7) 
    at Socket.onClose (C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\engine.io\lib\socket.js:304:10) 
    at WebSocket.g (events.js:291:16) 
    at emitNone (events.js:86:13) 
    at WebSocket.emit (events.js:185:7) 
    at WebSocket.Transport.onClose (C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\engine.io\lib\transport.js:126:8) 
    at WebSocket.g (events.js:291:16) 
    at emitTwo (events.js:106:13) 
    at WebSocket.emit (events.js:191:7) 
    at WebSocket.cleanupWebsocketResources (C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\engine.io\node_modules\ws\lib\ 
WebSocket.js:927:10) 
    at emitOne (events.js:101:20) 
    at Socket.emit (events.js:188:7) 
    at emitErrorNT (net.js:1276:8) 
    at _combinedTickCallback (internal/process/next_tick.js:74:11) 
    at process._tickCallback (internal/process/next_tick.js:98:9)

回答

0

所以它看起来像关闭autowatch是什么原因造成这一点。如果我再打开它,它就会起作用。当你通过ng测试运行它时,似乎将singleRun设置为true也没有效果。

如果你想用autoWatch false和singleRun true来运行,你需要使用karma start。老派FTW!

更新:

按照Angular-CLI usage docs,使用singleRun并没有autoWatch:

运行单元测试

ng test

测试构建之后将执行经噶执行,它会自动监视你的文件的变化。您可以通过--watch=false--single-run一次运行测试。

0

这听起来像你想离开autoWatch并打开singleRun。使用--config传递一个单独的配置文件进行测试。这样,如果您关心的是结果,并且仍然保留原始配置以用于调试测试时,也可以不显示chrome窗口。

进行以下配置文件更改并运行npm run test:headlessng test --config karma.conf.headless.js。您也可以在您的ci环境中使用它在vm中运行测试并记录测试结果。

添加新的节点脚本来运行无头测试。

的package.json:

{ 
... 
    "scripts": { 
    "ng": "ng", 
    "start": "ng serve", 
    "build": "ng build", 
    "test": "ng test", 
    "test:headless": "ng test --config karma.conf.headless.js", 
    "lint": "ng lint", 
    "e2e": "ng e2e", 
    "e2e:headless": "ng e2e --config protractor.conf.headless.js" 
    }, 
... 
} 

karma.conf.headless.js

module.exports = function(config) { 
    config.set({ 
    basePath: '', 
    frameworks: ['jasmine', '@angular/cli'], 
    plugins: [ 
     require('karma-jasmine'), 
     require('karma-chrome-launcher'), 
     require('karma-jasmine-html-reporter'), 
     require('karma-coverage-istanbul-reporter'), 
     require('@angular/cli/plugins/karma') 
    ], 
    client:{ 
     clearContext: false // leave Jasmine Spec Runner output visible in browser 
    }, 
    coverageIstanbulReporter: { 
     reports: [ 'html', 'lcovonly' ], 
     fixWebpackSourcePaths: true 
    }, 
    angularCli: { 
     environment: 'dev' 
    }, 
    reporters: config.angularCli && config.angularCli.codeCoverage 
     ? ['progress', 'coverage-istanbul'] 
     : ['progress', 'kjhtml'], 
    port: 9876, 
    colors: true, 
    logLevel: config.LOG_INFO, 
    autoWatch: true, 
    browsers: ['ChromeHeadless'], 
    singleRun: true, 
    customLaunchers: { 
     ChromeHeadless: { 
      base: 'Chrome', 
      flags: [ 
       // See https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md 
       '--headless', 
       '--disable-gpu', 
       // Without a remote debugging port, Google Chrome exits immediately. 
       '--remote-debugging-port=9222', 
      ] 
     } 
    } 
    }); 
}; 

为了完整这里的量角器的conf以及 protractor.conf.headless.js

const { SpecReporter } = require('jasmine-spec-reporter'); 

exports.config = { 
    allScriptsTimeout: 11000, 
    specs: [ 
    './e2e/**/*.e2e-spec.ts' 
    ], 
    capabilities: { 
    'browserName': 'chrome', 
    chromeOptions: { 
     args: [ "--headless", "--disable-gpu", "--window-size=1280x720" ] 
    } 
    }, 
    directConnect: true, 
    baseUrl: 'http://localhost:4200/', 
    framework: 'jasmine', 
    jasmineNodeOpts: { 
    showColors: true, 
    defaultTimeoutInterval: 30000, 
    print: function() {} 
    }, 
    onPrepare() { 
    require('ts-node').register({ 
     project: 'e2e/tsconfig.e2e.json' 
    }); 
    jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); 
    } 
}; 
+0

不,我不关心autowatch的一种或另一种方式。但似乎没有测试!我讨厌跑无头,因为你不能以这种方式设置断点。 –

+0

我不确定我是否理解这个问题。我有2配置默认,当我运行'npm运行测试'启动在自动测试chrome上的测试。我大部分时间都在使用,所以我可以设置断点和调试。另一种情况是当我运行'npm run test:headless'时,我在CI中使用并且只想在控制台中看到测试结果。你是否正在寻找像在铬中运行的东西,但不要留意变化? – majinnaibu

+0

我认为这可能只是该特定版本的Angular-CLI的一个问题。你目前使用的是我在11月份使用的那个吗?根据下面的文档,该版本脱离了命令行开关,而不是karma配置文件。 –