本篇记录angular中进行单元测试的步骤及的jasmine和karma配置含义
jasmine和karma
Karma:一个基于Node.js的JavaScript测试执行过程管理工具(Test Runner)。可用于测试所有主流Web浏览器、可集成到CI(Continuous integration)工具、可和其他代码编辑器一起使用。它可以监控(Watch)文件的变化,然后自行执行,通过console.log显示测试结果。 Jasmine:用来编写Javascript测试的框架,它不依赖于任何其它的javascript框架,也不需要对DOM。语法灵巧而明确。
使用 Angular CLI 创建一个Angular项目
1. npm install -g @angular/cli
2. ng new project-agular-unit-test
karma.conf.js:
// 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({
// 基础路径(适用file、exclude属性)
basePath: '',
// 测试框架,@angular/cli 指Angular测试工具集
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
},
// 哪些文件需要被浏览器加载,后面会专门介绍 `test.ts`
files: [
{ pattern: './src/test.ts', watched: false }
],
// 允许文件到达浏览器之前进行一些预处理操作
// 非常丰富的预处理器:https://www.npmjs.com/browse/keyword/karma-preprocessor
preprocessors: {
'./src/test.ts': ['@angular/cli']
},
// 指定请求文件MIME类型
mime: {
'text/x-typescript': ['ts', 'tsx']
},
// 插件【karma-coverage-istanbul-reporter】的配置项
coverageIstanbulReporter: {
// 覆盖率报告方式
reports: ['html', 'lcovonly'],
fixWebpackSourcePaths: true
},
// 指定angular cli环境
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: ['Chrome'],
// 持续集成模式,true:表示浏览器执行测试后退出
singleRun: false
});
};
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma')
],
client: {
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, './coverage/project-unitTest'),
reports: ['html', 'lcovonly', 'text-summary'],
fixWebpackSourcePaths: true
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
restartOnFileChange: true
});
};
- frameworks:设定jasmine为被测试框架。若想使用另一个框架,修改这里。
- reporters:负责将测试结果告知给开发者。通常是将结果打印到控制台上,或存入文件中。
- autoWatch:若设置为true,则测试将以Watch模式运行。更改任何测试并保存文件,测试将重新生成并重新运行。
- browsers:设置测试运行的浏览器。默认情况下是chrome。