Angular-cli 不是 运行 spec.ts 文件
Angular-cli not running spec.ts files
我在 Webstorm 中创建了一个 Angular-CLI 项目,我试图确保所有测试都 运行ning。它启动 chrome 浏览器,但不报告任何内容。所以我在第一个 it 块中修改了 app.component.spec.ts 以仅添加一个 console.log 语句,该语句不会记录到控制台。
在我手动关闭 Chrome 之前,它不会报告任何内容或给出任何错误(出于某种原因,即使我将其设置为仅 运行 一旦它不会自行关闭) .它也没有显示 console.log 语句。
Karma.config
// Karma 配置文件,参见 link 获取更多信息
// https://karma-runner.github.io/0.13/config/configuration-file.html
module.exports = 功能(配置){
config.set({
基本路径:'',
框架:['jasmine'、'angular-cli']、
插件:[
要求('karma-jasmine'),
要求('karma-chrome-launcher'),
要求('karma-remap-istanbul'),
要求('angular-cli/plugins/karma')
],
文件:[
{ pattern: './src/*/*.spec.ts', watched: false }
],
预处理器:{
'./src/test.ts': ['angular-cli']
},
哑剧:{
'text/x-typescript': ['ts','tsx']
},
重新映射伊斯坦布尔记者:{
报告:{
html: 'coverage',
lcovonly: './coverage/coverage.lcov'
}
},
angular客户端:{
配置:'./angular-cli.json',
环境:'dev'
},
记者:config.angularCli && config.angularCli.codeCoverage
? ['progress', 'karma-remap-istanbul']
: ['progress'],
端口:9876,
颜色:真实,
日志级别:config.LOG_INFO,
自动监视:假,
浏览器:['Chrome'],
单次运行:真
});
};
关闭时出错 Chrome:
22 11 2016 10:01:27.657:ERROR [karma]: TypeError: 无法读取未定义的 属性 'map'
在 ProgressReporter._render(C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\karma\lib\reporters\progress.js:53:26)
在 ProgressReporter.writeCommonMsg(C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\karma\lib\reporters\progress.js:9:
44)
在 ProgressReporter.BaseReporter.onBrowserError(C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\karma\lib\reporters\b
ase.js:63:10)
在服务器。 (C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\karma\lib\events.js:13:22)
在 emitTwo (events.js:111:20)
在 Server.emit (events.js:191:7)
在断开连接时(C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\karma\lib\browser.js:40:13)
在 Browser.onDisconnect(C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\karma\lib\browser.js:157:7)
在套接字。 (C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\karma\lib\events.js:13:22)
在 emitOne (events.js:96:13)
在 Socket.emit (events.js:188:7)
在 Socket.emit(C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\socket.io\lib\socket.js:128:10)
在 Socket.onclose(C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\socket.io\lib\socket.js:425:8)
在 Client.onclose(C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\socket.io\lib\client.js:232:24)
在 emitTwo (events.js:111:20)
在 Socket.emit (events.js:191:7)
在 Socket.onClose(C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\engine.io\lib\socket.js:304:10)
在 WebSocket.g (events.js:291:16)
在 emitNone (events.js:86:13)
在网络Socket.emit (events.js:185:7)
在 WebSocket.Transport.onClose(C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\engine.io\lib\transport.js:126:8)
在 WebSocket.g (events.js:291:16)
在 emitTwo (events.js:106:13)
在网络Socket.emit (events.js:191:7)
在 WebSocket.cleanupWebsocketResources (C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\engine.io\node_modules\ws\lib\
WebSocket.js:927:10)
在 emitOne (events.js:101:20)
在 Socket.emit (events.js:188:7)
在 emitErrorNT (net.js:1276:8)
在 _combinedTickCallback (internal/process/next_tick.js:74:11)
在 process._tickCallback (internal/process/next_tick.js:98:9)
看来关闭自动监视是造成这种情况的原因。如果我重新打开它,它就会起作用。当您通过 ng 测试 运行 时,将 singleRun 设置为 true 似乎也具有零效果。
如果你想 运行 使用 autoWatch false 和 singleRun true,你需要使用 karma start。老派 FTW!
更新:
根据 Angular-CLI usage docs,要使用 singleRun 而不使用 autoWatch:
Running unit tests
ng test
Tests will execute after a build is executed via Karma, and it will automatically watch your files for changes. You can run tests a single time via --watch=false
or --single-run
.
听起来你想要打开 autoWatch 并同时打开 singleRun。使用 --config 传递一个单独的配置文件进行测试。如果您只关心结果,同时仍保留要调试测试时的原始配置,这也允许您不显示 chrome window。
进行以下配置文件更改和 运行 npm run test:headless
或 ng test --config karma.conf.headless.js
。您还可以在 ci 环境中使用它来 运行 虚拟机中的测试并记录测试结果。
将新的节点脚本添加到 运行 你的无头测试。
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 } }));
}
};
我在 Webstorm 中创建了一个 Angular-CLI 项目,我试图确保所有测试都 运行ning。它启动 chrome 浏览器,但不报告任何内容。所以我在第一个 it 块中修改了 app.component.spec.ts 以仅添加一个 console.log 语句,该语句不会记录到控制台。
在我手动关闭 Chrome 之前,它不会报告任何内容或给出任何错误(出于某种原因,即使我将其设置为仅 运行 一旦它不会自行关闭) .它也没有显示 console.log 语句。
Karma.config
// Karma 配置文件,参见 link 获取更多信息 // https://karma-runner.github.io/0.13/config/configuration-file.html module.exports = 功能(配置){ config.set({ 基本路径:'', 框架:['jasmine'、'angular-cli']、 插件:[ 要求('karma-jasmine'), 要求('karma-chrome-launcher'), 要求('karma-remap-istanbul'), 要求('angular-cli/plugins/karma') ], 文件:[ { pattern: './src/*/*.spec.ts', watched: false } ], 预处理器:{ './src/test.ts': ['angular-cli'] }, 哑剧:{ 'text/x-typescript': ['ts','tsx'] }, 重新映射伊斯坦布尔记者:{ 报告:{ html: 'coverage', lcovonly: './coverage/coverage.lcov' } }, angular客户端:{ 配置:'./angular-cli.json', 环境:'dev' }, 记者:config.angularCli && config.angularCli.codeCoverage ? ['progress', 'karma-remap-istanbul'] : ['progress'], 端口:9876, 颜色:真实, 日志级别:config.LOG_INFO, 自动监视:假, 浏览器:['Chrome'], 单次运行:真 }); };
关闭时出错 Chrome:
22 11 2016 10:01:27.657:ERROR [karma]: TypeError: 无法读取未定义的 属性 'map' 在 ProgressReporter._render(C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\karma\lib\reporters\progress.js:53:26) 在 ProgressReporter.writeCommonMsg(C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\karma\lib\reporters\progress.js:9: 44) 在 ProgressReporter.BaseReporter.onBrowserError(C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\karma\lib\reporters\b ase.js:63:10) 在服务器。 (C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\karma\lib\events.js:13:22) 在 emitTwo (events.js:111:20) 在 Server.emit (events.js:191:7) 在断开连接时(C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\karma\lib\browser.js:40:13) 在 Browser.onDisconnect(C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\karma\lib\browser.js:157:7) 在套接字。 (C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\karma\lib\events.js:13:22) 在 emitOne (events.js:96:13) 在 Socket.emit (events.js:188:7) 在 Socket.emit(C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\socket.io\lib\socket.js:128:10) 在 Socket.onclose(C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\socket.io\lib\socket.js:425:8) 在 Client.onclose(C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\socket.io\lib\client.js:232:24) 在 emitTwo (events.js:111:20) 在 Socket.emit (events.js:191:7) 在 Socket.onClose(C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\engine.io\lib\socket.js:304:10) 在 WebSocket.g (events.js:291:16) 在 emitNone (events.js:86:13) 在网络Socket.emit (events.js:185:7) 在 WebSocket.Transport.onClose(C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\engine.io\lib\transport.js:126:8) 在 WebSocket.g (events.js:291:16) 在 emitTwo (events.js:106:13) 在网络Socket.emit (events.js:191:7) 在 WebSocket.cleanupWebsocketResources (C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\engine.io\node_modules\ws\lib\ WebSocket.js:927:10) 在 emitOne (events.js:101:20) 在 Socket.emit (events.js:188:7) 在 emitErrorNT (net.js:1276:8) 在 _combinedTickCallback (internal/process/next_tick.js:74:11) 在 process._tickCallback (internal/process/next_tick.js:98:9)
看来关闭自动监视是造成这种情况的原因。如果我重新打开它,它就会起作用。当您通过 ng 测试 运行 时,将 singleRun 设置为 true 似乎也具有零效果。
如果你想 运行 使用 autoWatch false 和 singleRun true,你需要使用 karma start。老派 FTW!
更新:
根据 Angular-CLI usage docs,要使用 singleRun 而不使用 autoWatch:
Running unit tests
ng test
Tests will execute after a build is executed via Karma, and it will automatically watch your files for changes. You can run tests a single time via
--watch=false
or--single-run
.
听起来你想要打开 autoWatch 并同时打开 singleRun。使用 --config 传递一个单独的配置文件进行测试。如果您只关心结果,同时仍保留要调试测试时的原始配置,这也允许您不显示 chrome window。
进行以下配置文件更改和 运行 npm run test:headless
或 ng test --config karma.conf.headless.js
。您还可以在 ci 环境中使用它来 运行 虚拟机中的测试并记录测试结果。
将新的节点脚本添加到 运行 你的无头测试。
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 } }));
}
};