Karma 5:集成 Karma 和 Angular2
集成 Karma 和 Angular2 我们需要做很多工作,由于需要使用 TypeScript 进行开发,首先需要正确配置 Typescript ,然后正确配置对 Angular2 的引用。还要创建 Karma 的入口文件,以便进行打包。
1. 安装工具
安装 Angular2.beta.7
karma3@1.0. C:\study\karmaStudy\karma3
├── angular2@2.0.-beta.
├── UNMET PEER DEPENDENCY es6-promise@^3.0.
├── UNMET PEER DEPENDENCY es6-shim@^0.33.
├── UNMET PEER DEPENDENCY reflect-metadata@0.1.
├── UNMET PEER DEPENDENCY rxjs@5.0.-beta.
└── UNMET PEER DEPENDENCY zone.js@0.5. npm WARN EPEERINVALID angular2@2.0.-beta. requires a peer of es6-promise@^3.0. but none was installed.
npm WARN EPEERINVALID angular2@2.0.-beta. requires a peer of es6-shim@^0.33. but none was installed.
npm WARN EPEERINVALID angular2@2.0.-beta. requires a peer of reflect-metadata@0.1. but none was installed.
npm WARN EPEERINVALID angular2@2.0.-beta. requires a peer of rxjs@5.0.-beta. but none was installed.
npm WARN EPEERINVALID angular2@2.0.-beta. requires a peer of zone.js@0.5. but none was installed.
如果使用了 NPM 3 以上版本,需要手工安装依赖库
es6-promise@^3.0.2
es6-shim@^0.33.3
reflect-metadata@0.1.2
rxjs@5.0.0-beta.2
zone.js@0.5.15
安装 webpack 和它的插件 ts-loader
npm i -D webpack ts-loader
安装 karma 及其插件
npm i -D karma karma-chrome-launcher karma-jasmine jasmine-core karma-webpack
安装 typings
这里,我们需要 es6-shim 的定义和 jasmine 的定义。
奇怪的是 install 必须是第一个参数。
安装 jasmine 的定义
> typings install --save --ambient jasmine
? Found jasmine typings for DefinitelyTyped. Continue? Yes
Installing jasmine@~2.2.0 (DefinitelyTyped)... jasmine
└── (No dependencies)
安装 es6-shim 的定义
> typings install --save --ambient es6-shim
? Found es6-shim typings for DefinitelyTyped. Continue? Yes
Installing es6-shim@~0.31. (DefinitelyTyped)... es6-shim
└── (No dependencies)
这些组件安装完成之后,你的 package.json 应该是这样的。
{
"name": "karma3",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"angular2": "^2.0.0-beta.7",
"es6-promise": "^3.0.2",
"es6-shim": "^0.33.3",
"reflect-metadata": "^0.1.2",
"rxjs": "^5.0.0-beta.2",
"zone.js": "^0.5.15"
},
"devDependencies": {
"jasmine-core": "^2.4.1",
"karma": "^0.13.21",
"karma-chrome-launcher": "^0.2.2",
"karma-jasmine": "^0.3.7",
"karma-webpack": "^1.7.0",
"ts-loader": "^0.8.1",
"typings": "^0.6.8",
"webpack": "^1.12.14"
}
}
2. 编写示例代码
在项目目录中创建 src 文件夹,在其中创建名为 MyMaths.ts 的代码文件
import { Component } from 'angular2/core';
import { Injectable } from 'angular2/core';
@Component({
selector: "hello"
})
export class MyMaths{
add(a: number, b:number ){
return a + b;
}
}
在项目目录中,创建 test 和其中的 unit 子文件夹,我们的单元测试将会保存在这个文件夹中。
创建名为 MyMaths.spec.ts 的单元测试文件
import { MyMaths } from '../../src/MyMaths';
describe('hello, unit test.', function(){
var myMaths = new MyMaths();
it('hello, add', function(){
let a = 2, b = 3;
let result = myMaths.add(a, b );
expect(result).toBe( 5 );
});
it('it should failded.', function(){
let a = 2, b = 3;
let result = myMaths.add(a, b);
expect(result).toBe( 100 );
})
});
3. 配置环境
1. 配置 TypeScript
在项目目录中创建名为 tsconfig.Json 的 TypeScript配置文件。
注意其中的 noEmitHelpers 必须配置为 false,emitDecoratorMetadata 必须配置为 true.
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"removeComments": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"noEmitHelpers": false,
"noImplicitAny": false,
"sourceMap": true
},
"exclude":[
"node_modules",
"typings/main",
"typings/main.d.ts"
],
"filesGlob": [
"./src/**/*.ts",
"!./node_modules/**/*.ts"
]
}
2. 配置 webpack
webpack 的默认配置文件为 webpack.config.js,我们这里用来测试打包的正确性。
var path = require('path');
var ROOT_PATH = path.resolve(__dirname);
var BUILD_PATH = path.resolve(ROOT_PATH, 'build');
module.exports = {
resolve: {
extensions: ['', '.js', '.ts']
},
entry: "./spec-bundle.js",
output: {
path: BUILD_PATH,
filename: 'bundle.js'
},
module: {
loaders: [
{ test: /\.ts$/, loader: 'ts-loader' }
]
},
node: {
global: 'window',
progress: false,
crypto: 'empty',
module: false,
clearImmediate: false,
setImmediate: false
}
};
3. 配置 karma
首先,创建 karma 的入口文件,我们通过这个文件将所有的测试代码和待测试代码一起打包。
创建名为 spec-bundle.js 的入口文件。
require('es6-shim');
require('es6-promise');
require('reflect-metadata');
require('rxjs');
require('zone.js');
var testContext = require.context('./test', true, /\.spec\.ts/);
var appContext = require.context('./src', true, /\.ts/);
appContext.keys().forEach(appContext);
testContext.keys().forEach(testContext);
var domAdapter = require('angular2/src/platform/browser/browser_adapter');
domAdapter.BrowserDomAdapter.makeCurrent();
然后,创建 karma 的配置文件。可以先使用 karma init 创建基本的配置信息,然后修改为我们需要的内容。
// Karma configuration
// Generated on Thu Feb 25 2016 10:11:36 GMT+0800 (China Standard Time) module.exports = function(config) {
var testWebpackConfig = require('./webpack.test.config.js'); config.set({ // base path that will be used to resolve all patterns (eg. files, exclude)
basePath: '', // frameworks to use
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
frameworks: ['jasmine'], // list of files / patterns to load in the browser
files: [
'spec-bundle.js'
], // list of files to exclude
exclude: [
], // preprocess matching files before serving them to the browser
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
preprocessors: {
'spec-bundle.js': ['webpack']
},
webpack: testWebpackConfig, // test results reporter to use
// possible values: 'dots', 'progress'
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
reporters: ['progress'], // web server port
port: 9876, // enable / disable colors in the output (reporters and logs)
colors: true, // level of logging
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
logLevel: config.LOG_INFO, // enable / disable watching file and executing tests whenever any file changes
autoWatch: true, // start these browsers
// available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
browsers: ['Chrome'], // Continuous Integration mode
// if true, Karma captures browsers, runs the tests and exits
singleRun: true, // Concurrency level
// how many browser should be started simultaneous
concurrency: Infinity
})
}
这里用到了 webpack 进行打包,而且声明了使用 webpack.test.config.js 作为 webpack 的配置文件。
创建这个名为 webpack.test.config.js 的配置文件。这个文件不需要入口文件,也不需要输出目录。Karma 将提供入口和获取打包之后的输出。
var path = require('path');
var ROOT_PATH = path.resolve(__dirname);
var BUILD_PATH = path.resolve(ROOT_PATH, 'build');
module.exports = {
resolve: {
extensions: ['', '.js', '.ts']
},
module: {
loaders: [
{ test: /\.ts$/, loader: 'ts-loader' }
]
},
node: {
global: 'window',
progress: false,
crypto: 'empty',
module: false,
clearImmediate: false,
setImmediate: false
}
};
4. 测试
1. 检查打包是否正确。
由于已经配置了 webpack,可以直接在项目目录中执行 webpack,应该可以在 build 子目录中看到打包之后的文件,文件中应该已经正确包含了我们的所有代码。
2. 执行测试
执行 karma start ,可以完成测试过程。
::15.560:INFO [karma]: Karma v0.13.21 server started at http://localhost:9876/
::15.576:INFO [launcher]: Starting browser Chrome
::18.349:INFO [Chrome 47.0. (Windows 0.0.)]: Connected on socket /#uBbzQ9xOIQzT1jNOAAAA with id
Chrome 47.0. (Windows 0.0.) hello, unit test. it should failded. FAILED
Expected to be .
at Object.<anonymous> (C:/study/karmaStudy/karma3/spec-bundle.js::)
Chrome 47.0. (Windows 0.0.): Executed of ( FAILED) (0.026 secs / 0.013 secs)
5. 讨论
这个过程的配置信息较为复杂,需要耐心检查错误。
Karma 5:集成 Karma 和 Angular2的更多相关文章
- Karma:2. 集成 Karma 和 mocha 进行单元测试
上一篇文章讨论了如何集成 Karma 和 Jasmine,地址见:Karma:1. 集成 Karma 和 Jasmine 进行单元测试 这篇文章讨论如何 Karma 集成 mocha 测试框架. 安装 ...
- Karma:1. 集成 Karma 和 Jasmine 进行单元测试
关于 Karma 会是一个系列,讨论在各种环境下,使用 Karma 进行单元测试. 本文讨论 karma 集成 Jasmine 进行单元测试. 初始化 NPM 实现初始化 NPM 包管理,创建 pac ...
- 在WebStorm中集成Karma+jasmine进行前端单元测试
在WebStorm中集成Karma+jasmine进行前端单元测试 前言 好久没有写博了,主要还是太懒=.=,有点时间都去带娃.看书了,今天给大家分享一个原创的小东西,如果大家对TDD或者BDD有兴趣 ...
- angularJS+requireJS并集成karma测试实践
最近在为下一个项目做前端技术选型,Angular是必须要用的(BOSS指定,个人感觉也不错,开发效率会很高).由于需要加载的JS很多,所以打算看看angular和requirejs一起用会怎么样.在g ...
- karma的基础应用之与fis结合
一.介绍 1. karma是单元测试运行框架,可以集成jasmine断言库,也支持babel. 2.fis是百度前端团队开源推出的前端工程化管理工具. 二.karma的基础应用 1.karma的基础a ...
- JS相关环境搭建:Nodejs、karma测试框架、jsDuck、Express
第一章:压缩js(nodejs,uglify) 第一步:安装nodejs环境 直接下载http://www.nodejs.org/download/ 下载完成后直接下一步下一步即可,完了我们就具有no ...
- Karma +Jasmine+ require JS进行单元测试并生成测试报告、代码覆盖率报告
1. 关于Karma Karma是一个基于Node.js的JavaScript测试执行过程管理工具(Test Runner). 该工具可用于测试所有主流Web浏览器,也可集成到CI(Continuou ...
- angularJS测试一 Karma Jasmine Mock
AngularJS测试 一 测试工具 1.NodeJS领域:Jasmine做单元测试,Karma自动化完成单元测试,Grunt启动Karma统一项目管理,Yeoman最后封装成一个项目原型模板,npm ...
- karma note
karma 简介 karma不是一个测试框架,仅仅是启动了一个httpServer karma仅仅是一个跑测试的平台(runner), 我们可以使用各种测试框架, 如: Jasmine Mocha Q ...
随机推荐
- [转]Android,Yocto,Meego构建系统的区别
http://m.blog.csdn.net/blog/sonach_tjsd/6647829
- 【转】不是技术牛人,如何拿到国内IT巨头的Offer
不久前,byvoid面阿里星计划的面试结果截图泄漏,引起无数IT屌丝的羡慕敬仰.看看这些牛人,NOI金牌,开源社区名人,三年级开始写Basic...在跪拜之余我们不禁要想,和这些牛人比,作为绝大部分技 ...
- Python静态网页爬虫相关知识
想要开发一个简单的Python爬虫案例,并在Python3以上的环境下运行,那么需要掌握哪些知识才能完成一个简单的Python爬虫呢? 爬虫的架构实现 爬虫包括调度器,管理器,解析器,下载器和输出器. ...
- 算法(第4版)-1.3.1 API
总结:本小节介绍了泛型.自动装箱.迭代.Bag.Queue.Stack以及一个栈用例的经典例子--算术表达式求值. 重点: 1. 集合类的抽象数据类型的一个关键特性是我们应该可以用它们储存任意类型的数 ...
- js限制文本框只能输入整数或者带小数点[转]
这篇文章是关于js限制文本框只能输入整数或者带小数点的内容,以下就是该内容的详细介绍. 做表单验证的时候是否会碰到验证某个输入框内只能填写数字呢,仅允许输入整数数字或者带小数点的数字.下面这段代码也许 ...
- hibernate的数据库乱码问题
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-configuration ...
- USACO 08-Nov( 最小生成树)
美国人出题拐弯抹角,倒是挺尊重动物的 10206301 2 52 3 52 4 123 4 172 5 153 5 64 5 12 Hint从牧场4起床, 然后按照 4, 5, 4, 2, 3, 2, ...
- python学习:函数的学习
我们写东东的时候,往往有一些东西要频繁去复用,那么每个功能是10行代码,复用2次就是20行,这样看来我们的程序如果频繁利用某些代码的话,那么会是我们开发的东西越来越臃肿.那么好的方法有没有呢,那就是函 ...
- Filco minila 的蛋疼。
3494左shift坏了,期间邮寄厂家维修,就把尘封多年的minila拿出来用着. 最为人诟病的问题:蓝亚适配,与mac跟iphone都能快速的匹配连接上.但是对于我的dell vestro 2012 ...
- Backtracking line search的理解
使用梯度下降方法求解凸优化问题的时候,会遇到一个问题,选择什么样的梯度下降步长才合适. 假设优化函数为,若每次梯度下降的步长都固定,则可能出现左图所示的情况,无法收敛.若每次步长都很小,则下降速度非常 ...