karma和jasmine的测试(包括angular测试)
本篇博客主要就是针对现在日新月异的技术和快速开发,测试被很多人忽略,其实在开发中如何保证代码的质量以及逻辑的完整性,测试显得十分重要,本文就是负责karma+jasmine来测试。
{
"name": "karma-jsmin",
"version": "1.0.0",
"description": "",
"main": "karma.conf.js",
"directories": {
"test": "test"
},
"dependencies": {
"jasmine-core": "^2.5.2",
"karma": "^0.12.33",
"karma-chrome-launcher": "^2.0.0",
"karma-jasmine": "^1.1.0"
},
"devDependencies": {},
"scripts": {
"test": "node node_modules/karma/bin/karma start"
},
"author": "",
"license": "ISC"
}
// Karma configuration
// Generated on Thu Apr 20 2017 10:43:31 GMT+0800 (中国标准时间)
module.exports = function(config) {
config.set({
/**
*如果所有文件处于同样的路径,则可以在这里配置基础的路径,用在files,exclude属性上
*例如 dest/one.js 和 dest/one-test.js 这里配置dest/
*后面的files就可以写成['one.js','one-test.js']*/
basePath: '',
/**
* 测试框架
* 可用的框架:jasmine,mocha...
*/
frameworks: ['jasmine'],
// 需要测试的文件
files: [
// 'need/app.js',
// 'test/app-test.js'
'angular/angular.js',
'angular/angular-mocks.js',
'ng-js/filter.js',
'ng-test-js/filter-test.js'
],
/**
* 排除的文件列表
*/
exclude: ['karma.conf.js'],
//预处理程序,
// preprocessors: {
// 'test/**/*.js': ['webpack', 'coverage'] //新增 coverage为覆盖率测试
// },
preprocessors: {
'ng-js/demo1.js':'coverage'
},
/**
* 使用测试结果报告者
* 可能的值: "dots", "progress"
* 可用的报告者:https://npmjs.org/browse/keyword/karma-reporter
*/
reporters: ['progress','coverage'],
//在coverage目录下生成html文件,用来监测这个测试项目的功能是否完全
coverageReporter:{
type:'html',
dir:'coverage/'
},
// 测试执行会打开一个页面,就是这个页面的端口,可以随意设置
port: 9876,
//启用或禁用输出报告或者日志中的颜色
// 测试命令执行的时候,出错误或者测试不通过显示不同的颜色,否则只有白色,
colors: true,
/**
* 日志等级
* 可能的值:
* config.LOG_DISABLE //不输出信息
* config.LOG_ERROR //只输出错误信息
* config.LOG_WARN //只输出警告信息
* config.LOG_INFO //输出全部信息
* config.LOG_DEBUG //输出调试信息
*/
logLevel: config.LOG_INFO,
// 是否自动监测测试文件的改动并及时重新测试
autoWatch: true,
// 测试执行打开的页面,可以使用火狐,ie,Opera等浏览器
browsers: ['Chrome'],
/**
* 开启或禁用持续集成模式
* 设置为true, Karma将打开浏览器,执行测试并最后退出
*/
singleRun: false
});
};
"scripts": {
"test": "node node_modules/karma/bin/karma start",
"init": "node node_modules/karma/bin/karma init"
},

function add(x,y){
return x+y;
}
files: [
"js/one.js",
"test/one-test.js"
],
,然后执行npm run test,命令行不出现红色,并且会自动弹出浏览器代表执行成功。打开浏览器的debug,按下F12查看,可以看到console里面输出:
var app = angular.module('demoApp', []);
//在测试之前要先引入angular以及对应版本的angular-mock
app.controller('test1Ctrl',function($scope){
$scope.name = "app"
$scope.num = 0;
$scope.incrementNum = function () {
$scope.num++;
}
})
然后在你的test文件夹创建ng-demo-test.js,代码如下:
/*beforeEach 用来做测试前的准备工作,
inject利用angular的依赖注入,将需要的模块,服务插入作用域。真正的测试代码在it函数里,*/
describe('第一个angular测试',function(){
var scope;
//beforeEach 表示在运行所有测试前的准备工作。
//这里生成demoApp 的module
beforeEach(module('demoApp'));//模拟我们的demoApp模块并注入我们自己的依赖
beforeEach(inject(function($rootScope,$controller){//inject解决依赖关系注入到一个函数。
//模拟生成scope, $rootScope是angular中的顶级scope,angular中每个controller中的
//scope都是rootScope new出来的
scope = $rootScope.$new();//把全局scope等于new出来的scope
//模拟生成controller并且注入已创建的空的 scope
$controller('test1Ctrl', {$scope: scope});//把这个全局的scope和测试的angular的controller里面的$scope连通
}))
it("scope里面的 name 为 app", function () {
expect(scope.name).toEqual('bpp');
})
it('incrementNum执行后,scope内的num变成1',function(){
scope.incrementNum()//执行scope内的incrementNum函数
expect(scope.num).toEqual(1);
})
})
在你的karma.conf.js的files引入这个两个文件,执行npm run test即可;
var app = angular.module('demoApp', [])
.directive("unorderedList", function () {
return function (scope, element, attrs) {
var data = scope[attrs["unorderedList"]];
if (angular.isArray(data)) {
var listElem = angular.element("<ul>");
element.append(listElem);
for (var i = 0; i < data.length; i++) {
listElem.append(angular.element('<li>').text(data[i].name));
}
}
}
})
测试代码如下:
describe('directive的测试',function(){
var scope={},
compileServer;
beforeEach(module("demoApp"));
//我们需要一个叫做$compile的服务来完成实际的编译
beforeEach(inject(function ($rootScope, $compile) {
compileService = $compile;
//模拟scope里面的数据
scope.data = [
{ name: "Apples", category: "Fruit", price: 1.20, expiry: 10 },
{ name: "Bananas", category: "Fruit", price: 2.42, expiry: 7 },
{ name: "Pears", category: "Fruit", price: 2.02, expiry: 6 }];
}));
it("创建列表的元素", function () {
/*在要被测试的scope中,一个directive需要被compiled(也就是下面代码中的$compile(tpl)(scope);这句话在做的事情)*/
var elem = compileService("<div unordered-list='data'></div>")(scope);//$compile(html)(scope);
//我们将这个元素编译到一个作用域,它现在就可以被测试了
// var elem = compileFn(scope);
expect(elem.children("ul").length).toEqual(1);
expect(elem.find("li").length).toEqual(3);
expect(elem.find("li").eq(0).text()).toEqual("Apples");
expect(elem.find("li").eq(1).text()).toEqual("Bananas");
expect(elem.find("li").eq(2).text()).toEqual("Pears");
});
})
3.3测试filter
var app = angular.module('demoApp', []);
app.filter("labelCase", function () {
return function (value) {
return value.toUpperCase()
};
})
测试代码:
describe("Filter的测试", function () {
var filterInstance;
beforeEach(module("demoApp"));//模块
beforeEach(inject(function (labelCaseFilter) {
//引入需要测试的filter
filterInstance = labelCaseFilter;
}));
it("test phrase经过过滤器后变成 TEST PHRASE", function () {
var result = filterInstance("test phrase");
expect(result).toEqual("TEST PHRASE");
});
});
karma和jasmine的测试(包括angular测试)的更多相关文章
- 使用PowerMockito和Mockito进行模拟测试,包括静态方法测试,私有方法测试等,以及方法执行的坑或者模拟不成功解决
依赖:这个很重要,不同版本用法也有点区别: <dependency> <groupId>org.mockito</groupId> <artifactId&g ...
- angular测试-Karma + Jasmine配置
首先讲一下大致的流程: 需要node环境,首先先要安装node,node不会?请自行搜索.版本>0.8 安装node完成之后先要测试下npm是否测试通过,如下图所示 首先看下目录结构 目录为:F ...
- 用Karma和Jasmine测试Angular应用
TEST: Before you've written any of the code, you know how you want it to behave. You have a specific ...
- 基于Karma和Jasmine的AngularJS测试
1:工程目录结构 y@y:karma-t01$ tree -L 3.├── client│ ├── app│ │ └── user│ ├── bower_components│ │ ...
- karma+requirejs+angular 测试
http://karma-runner.github.io/0.8/plus/RequireJS.html karma 不是测试框架,只是一个运行测试框架的服务器 karma测试的原理是,将所有的文件 ...
- Karma和Jasmine自动化单元测试——本质上还是在要开一个浏览器来做测试
1. Karma的介绍 Karma是Testacular的新名字,在2012年google开源了Testacular,2013年Testacular改名为Karma.Karma是一个让人感到非常神秘的 ...
- Angular测试遇到的小坑
Angular测试遇到的小坑 Error: Expected to be running in 'ProxyZone', but it was not found 检查doneFn的写法是否正确,位置 ...
- Karma:1. 集成 Karma 和 Jasmine 进行单元测试
关于 Karma 会是一个系列,讨论在各种环境下,使用 Karma 进行单元测试. 本文讨论 karma 集成 Jasmine 进行单元测试. 初始化 NPM 实现初始化 NPM 包管理,创建 pac ...
- 基于karma和jasmine的Angularjs 单元测试
Angularjs 基于karma和jasmine的单元测试 目录: 1. 单元测试的配置 2. 实例文件目录解释 3. 测试controller 3.1 测试controller中变量值是否 ...
随机推荐
- jmeter的基本使用过程
jmeter的基本使用过程 接下来几周,我将通过视频的方式,录制下来jmeter的基本用法,方便大家参考学习 可能导图会随时调整
- CCF-NOIP-2018 提高组(复赛) 模拟试题(四)
T1 贪吃蛇 [问题描述] 贪吃蛇是一个好玩的游戏.在本题中,你需要对这个游戏进行模拟. 这个游戏在一个 \(n\) 行 \(m\) 列的二维棋盘上进行. 我们用 \((x, y)\) 来表示第 \( ...
- android问题笔记集
开发工具:android studio2.2 调试:手机直连调试,版本(android6) 问题1: Error:Unable to start the daemon process. This pr ...
- Go基础篇【第8篇】: 内置库模块 bytes [一]
bytes包实现了操作[]byte的常用函数.本包的函数和strings包的函数相当类似. func Compare func Compare(a, b []byte) int Compare函数返回 ...
- php+Mysql中网页出现乱码的解决办法详解
$conn = mysql_connect("$host","$user","$password");mysql_query("S ...
- DP入门(3)——多阶段决策问题
多阶段决策问题,简单地说,每做一次决策就可以得到解的一部分,当所有决策做完之后,完整的解就“浮出水面”了.在回溯法中,每次决策对应于给一个结点产生新的子树,而解的生成过程对应一棵解答树,结点的层数就是 ...
- lintcode-76-最长上升子序列
76-最长上升子序列 给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度. 说明 最长上升子序列的定义: 最长上升子序列问题是在一个无序的给定序列中找到一个尽可能长的由低到高排列的子序列 ...
- Mybatis学习系列(三)动态SQL
在mapper配置文件中,有时需要根据查询条件选择不同的SQL语句,或者将一些使用频率高的SQL语句单独配置,在需要使用的地方引用.Mybatis的一个特性:动态SQL,来解决这个问题. mybati ...
- 我和C语言程序
姓名:江超鸿 学号:160809129 爱好:打台球.听音乐 博客地址:https://www.cnblogs.com/jiangchaohong/ C语言:对于c语言程序来说,我是第一次接触,对它的 ...
- 从零开始配置Jenkins(二)——常见问题及排错思路
[前言] 一年多以前就听说Jenkins了,那时知道是它可以完成自动构建,感觉蛮强大的.后来,很多人都说它很恶心.最近,公司需要搭建新的服务器,小编就负责从头开始配置并且发布部署成功每一条线每一个项目 ...