基于Karma 和 Jasmine 的Angular 测试(持续更新中)

最近对前端测试较感兴趣,尤其是Nodejs + Karma + Jasmine 对Angular 的测试。到处看看,做个记录吧,断断续续的更新.

<一> 用Jasmine 测试 Angular 的service

1. 先扔代码吧:

var app = angular.module(‘Application‘, []);
app.factory(‘myService‘, function(){
    var service  = {};
    service.one  = 1;
    service.two  = 2;
    return service;
});

2. 怎么对这个angular 服务进行测试呢?

  • 使用angular.injector,调用Application Module,从而找到service。然后就是测试service 的function 了。
describe(‘myService test‘, function(){
    describe(‘when I call myService.one‘, function(){
        it(‘returns 1‘, function(){
            var $injector = angular.injector([ ‘Application‘ ]);
            var myService = $injector.get( ‘myService‘ );
            expect(myService.one).toEqual(1);
        })
    })
});

3. 结果如下:

因为我跑的有别的测试,so.

4.另一种方式来测试service

使用 ‘invoke‘ 将service传递给一个function

describe(‘myService test2‘, function(){
    describe(‘when I call myService.one‘, function(){
        it(‘returns 1‘, function(){

            var myTestFunction = function(aService){
                expect( aService.one ).toEqual(1);
            }

            myTestFunction.$inject = [ ‘myService‘ ];

            var myInjector = angular.injector([ ‘Application‘ ]);
            myInjector.invoke( myTestFunction );
        })
    })
});

5.再加一种更简单的方式:

beforeEach 是 jasmine 的语法,是在it() 之前跑的。

需要注意的是 inject function 并非angularjs 的标准包,它是在ngMock 模块的,并且只和Jasmine 一起work。

describe(‘myService test3‘, function(){
    describe(‘when I call myService.one‘, function(){
        beforeEach(module(‘Application‘));
        it(‘returns 1‘, inject(function(myService){ // 参数名就是service 名
            expect( myService.one ).toEqual(1);
        }))
    })
});
时间: 2024-07-30 13:49:13

基于Karma 和 Jasmine 的Angular 测试(持续更新中)的相关文章

基于Karma和Jasmine的AngularJS测试

1:工程目录结构 [email protected]:karma-t01$ tree -L 3.├── client│   ├── app│   │   └── user│   ├── bower_components│   │   ├── angular│   │   ├── angular-mocks│   │   └── angular-resource│   └── bower.json├── karma.conf.js└── readme 7 directories, 3 files

基于karma和jasmine的Angularjs 单元测试

Angularjs 基于karma和jasmine的单元测试 目录: 1. 单元测试的配置 2. 实例文件目录解释 3. 测试controller     3.1 测试controller中变量值是否正确     3.2 模拟http请求返回值,测试$http服务相关 4. 从文件中读取json,来模拟 http请求返回数据 5. 测试返回promise的service 已经有很多教程提到了angularjs项目的单元测试,但大都不是很全,如一些入门的文章,介绍了测试http service 却

shell 常用文件、字符串、二元整数测试操作符-持续更新中

常用的文件测试操作符-持续更新中 -e--exist 文件存在为真 -f--file 文件存在且为普通文件为真 -d--directory 文件存在且为目录为真 -s--size 文件存在且大小不为零为真 -r--read 文件存在且可读为真 -w--write 文件存在且可写为真 -x--executable 文件存在且可执行为真 -L--link 文件存在且为链接文件则为真 f1 -nt f2--new than f1比f2新则为真 f1 -ot f2--old than f1比f2旧则为真

Angular js开发的各种坑(持续更新中。。。)

Angular UI的Modal 在按照官方文档写的时候会报如下错误 var ModalDemoCtrl = function ($scope, $modal, $log) {   $scope.items = ['item1', 'item2', 'item3'];   $scope.open = function (size) {    var modalInstance = $modal.open({       templateUrl: 'myModalContent.html',   

前端面试题总结——HTML(持续更新中)

前端面试题总结--HTML(持续更新中) 1.什么是HTML? HTML:HyperText Markup Language超文本标记语言 2.XHTML和HTML有什么区别 HTML是一种基本的WEB网页设计语言,XHTML是一个基于XML的标记语言 3.简述一下你对HTML语义化的理解? html语义化让页面的内容结构化,结构更清晰,便于对浏览器.搜索引擎解析; 前端学习圈:767273102 ,从最基础的HTML+CSS+JavaScript.jQuery,Ajax,node,angula

【前端】Util.js-ES6实现的常用100多个javaScript简短函数封装合集(持续更新中)

Util.js (持续更新中...) 项目地址: https://github.com/dragonir/Util.js 项目描述 Util.js 是对常用函数的封装,方便在实际项目中使用,主要内容包含:数组类.浏览器类.日期类.函数类.数学类.媒体类.节点类.对象类.字符串类.类型检测类.正则表达式类等内容. 使用方法 1. 引入Bable transpiler以保证支持ES6 <script type="javascript/text" src="./browser

前端面试题总结——Html5(持续更新中)

前端面试题总结--H5(持续更新中) 1.HTML5 为什么只需要写 <!DOCTYPE HTML>? HTML5 需要doctype来规范浏览器的行为,让浏览器按照它们应该的方式来运行:HTML4.01基于SGML,所以需要对DTD进行引用,才能告知浏览器文档所使用的文档类型. 2.HTML5的form如何关闭自动完成功能? 给不想要提示的 form 或某个 input 设置为 autocomplete=off. 3.HTML5 中如何嵌入音频? 当前,audio 元素支持三种音频格式:&l

C 语言的若干问题(持续更新中)

mnesia在频繁操作数据的过程可能会报错:** WARNING ** Mnesia is overloaded: {dump_log, write_threshold},可以看出,mnesia应该是过载了.这个警告在mnesia dump操作会发生这个问题,表类型为disc_only_copies .disc_copies都可能会发生. 如何重现这个问题,例子的场景是多个进程同时在不断地mnesia:dirty_write/2 mnesia过载分析 1.抛出警告是在mnesia 增加dump

ansible部署及应用--持续更新中

1.简介 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能.ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架.主要包括: (1).连接插件connection plugins:负责和被监控端实现通信: (2).host inventory:指定操作的主机