自定义toEqual

toEqual mathers 支持用户自定义比较方法,使用的是jasmine.addCustomEquallyTester(myCustomEqualltyFunction)方法注册,注册的时候只能在beforeEachbeforeAllit内注册。myCustomEqualltyFunction接受两个参数,就是需要比较的值。比较完成后必须返回true或false。

describe("custom equality", function() {

    var myCustomEquality = function(first, second) {

        if (typeof first == "string" && typeof second == "string") {
return first[0] == second[1];
} }; beforeEach(function() {
jasmine.addCustomEqualityTester(myCustomEquality);
}); it("should be custom equal", function() {
expect("abc").toEqual("aaa");
}); it("should be custom not equal", function() {
expect("abc").not.toEqual("abc");
});
});

默认的toEqual被我们注册的比较方法给取代了。

自定义 mathers

mathers是一个定义了mathers function方法的对象,这个方法需要返回一个有campare属性的对象。同样的,使用 jasmine.addMatchers进行mathers的注册也只能发生在beforeEachbeforeAllit内。

var customMatchers = {
toBeGoofy: function(util, customEqualityTesters) {
return {
compare: function(actual, expected) {
if (expected === undefined) {
expected = '';
}
var result = {};
result.pass = util.equals(actual.hyuk, "gawrsh" + expected, customEqualityTesters);
if (result.pass) {
result.message = "Expected " + actual + " not to be quite so goofy";
} else {
result.message = "Expected " + actual + " to be goofy, but it was not very goofy";
}
return result;
}
};
}
}; describe("Custom matcher: 'toBeGoofy'", function() { beforeEach(function() {
jasmine.addMatchers(customMatchers);
}); it("is available on an expectation", function() {
expect({
hyuk: 'gawrsh'
}).toBeGoofy();
}); it("can take an 'expected' parameter", function() {
expect({
hyuk: 'gawrsh is fun'
}).toBeGoofy(' is fun');
}); it("can be negated", function() {
expect({
hyuk: 'this is fun'
}).not.toBeGoofy();
});
});
  • customMatchers:一个对象,可以包含多个方法作为matchers
  • toBeFoofy:一个matcherstoBeFoofy就是matchers调用时的名字。有参数util和customEqualityTesters(自定义toEqual)。进行matcher的时候都会执行这个方法。这个方法还需要返回一个有compare方法的对象才能正常执行;
  • compare:用作比较actual(实际)和expected(期望)。可以返回一个有pass和message属性对象,pass为true就是通过,pass为false就是不通过,message就是不通过的时候的提示信息。

matchers.not操作默认是取compare.pass的否定,如果想自定义.not的比较器,可以在compare方法后添加negativeCompare方法,当然,negativeCompare是可选的。

自定义reporter

在命令行敲下jasmine命令后会有一串的反馈信息,这串信息其实也是可以使用jasmine.getEnv().addReporter(myReporter);自定义的,注册时候建议使用全局定义。

myReporter是一个对象,它可以有以下方法:

  • jasmineStarted(suiteInfo):会在全部specs读取完成后,和execution开始前执行;
  • jasmineDone():会在整个套件完成后执行;
  • suiteStarted(result)/suiteDone(result):每个describe开始/结束的时候会执行;
  • specStarted(result)/specDone(result):每个it开始/结束的时候会执行。
var myReporter = {

    jasmineStarted: function(suiteInfo) {

        console.log('Running suite with ' + suiteInfo.totalSpecsDefined);
}, suiteStarted: function(result) { console.log('Suite started: ' + result.description + ' whose full description is: ' + result.fullName);
}, specStarted: function(result) { console.log('Spec started: ' + result.description + ' whose full description is: ' + result.fullName);
}, specDone: function(result) { console.log('Spec: ' + result.description + ' was ' + result.status);
for (var i = 0; i < result.failedExpectations.length; i++) { console.log('Failure: ' + result.failedExpectations[i].message);
console.log(result.failedExpectations[i].stack);
}
console.log(result.passedExpectations.length);
}, suiteDone: function(result) { console.log('Suite: ' + result.description + ' was ' + result.status);
for (var i = 0; i < result.failedExpectations.length; i++) { console.log('AfterAll ' + result.failedExpectations[i].message);
console.log(result.failedExpectations[i].stack);
}
}, jasmineDone: function() {
console.log('Finished suite');
}
}; jasmine.getEnv().addReporter(myReporter);
describe('Top Level suite', function() {
it('spec', function() { expect(1).toBe(1);
}); describe('Nested suite', function() {
it('nested spec', function() {
expect(true).toBe(true);
});
});
});

Jasmine 的自定义部分的更多相关文章

  1. angularjs自动化测试系列之jasmine

    angularjs自动化测试系列之jasmine jasmine参考 html <!DOCTYPE html> <html lang="en"> <h ...

  2. Karma+Jasmine实现自动化单元测试

    1.Karma介绍 Karma是Testacular的新名字,在2012年google开源了Testacular,2013年Testacular改名为Karma.Karma是一个让人感到非常神秘的名字 ...

  3. Jasmine入门(结合示例讲解)

    参考: http://www.cnblogs.com/wushangjue/p/4541209.html http://keenwon.com/1191.html http://jasmine.git ...

  4. JavaScript单元测试框架-Jasmine

    Jasmine的开发团队来自PivotalLabs,他们一开始开发的JavaScript测试框架是JsUnit,来源于著名的JAVA测试框架JUnit.JsUnit是xUnit的JavaScript实 ...

  5. 使用 Jasmine 进行测试驱动的 JavaScript 开发

    Jasmine 为 JavaScript 提供了 TDD (测试驱动开发)的框架,对于前端软件开发提供了良好的质量保证,这里对 Jasmine 的配置和使用做一个说明. 目前,Jasmine 的最新版 ...

  6. 前端测试框架 jasmine 的使用

    最近的项目在使用AngulaJs,对JS代码的测试问题就摆在了面前.通过对比我们选择了 Karma  + jasmine ,使用 Jasmine做单元测试 ,Karma 自动化完成,当然了如果使用 K ...

  7. angularJS测试一 Karma Jasmine Mock

    AngularJS测试 一 测试工具 1.NodeJS领域:Jasmine做单元测试,Karma自动化完成单元测试,Grunt启动Karma统一项目管理,Yeoman最后封装成一个项目原型模板,npm ...

  8. jasmine note

    jasmine 简介 jasmine 是一个测试驱动开发(TDD)测试框架, 一个js测试框架,它不依赖于浏览器.dom或其他js框架 jasmine有十分简洁的语法 使用 从 这里 下载 stant ...

  9. jasmine官方api参考

    jasmine 简介 jasmine 是一个行为驱动开发(TDD)测试框架, 一个js测试框架,它不依赖于浏览器.dom或其他js框架 jasmine有十分简介的语法 使用 从 这里 下载 stant ...

随机推荐

  1. DIV 和 SPAN 区别

    DIV 和 SPAN 元素最大的特点是默认都没有对元素内的对象进行任何格式化渲染.主要用于应用样式表(共同点). 两者最明显的区别在于DIV是块元素,而SPAN是行内元素(也译作内嵌元素). 详解:1 ...

  2. C# GridView Edit & Delete, 点击Delete的时候弹出确认框

    1. 使用GridView自带属性ShowEditButton和ShowDeleteButton,均设为True  <Columns> ... <asp:CommandField S ...

  3. iOS获取设备唯一标识的各种方法?IDFA、IDFV、UDID分别是什么含义?

    一.UDID (Unique Device Identifier) UDID的全称是Unique Device Identifier,顾名思义,它就是苹果IOS设备的唯一识别码,它由40个字符的字母和 ...

  4. Delphi 常用函数(数学函数)round、trunc、ceil和floor

    源:Delphi 常用函数(数学函数)round.trunc.ceil和floor Delphi 常用函数(数学) Delphi中怎么将实数取整? floor 和 ceil 是 math unit 里 ...

  5. Splay初步【bzoj1503】

    做了一道水题,把bzoj1503用Splay重新写了一下. #include <bits/stdc++.h> #define rep(i, a, b) for (int i = a; i ...

  6. js执行js字符串函数的方法

    <script> var jsText = 'return function(){alert(1+1)}' var jscode = new Function(jsText)(); jsc ...

  7. java系列--类和对象

    一.成员属性,构造方法,成员方法 1.类名首字母一般大写 2.方法名的首字母一般是小写,使用驼峰法(匈牙利法) myCry, 下划线法 my_cry 3.方法的声明没有函数体(接口,抽象类),数据类型 ...

  8. Python3基础 使用for循环 删除一个列表中的重复项

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...

  9. mybatis 参数为list时,校验list是否为空, mybatis ${}与#{}的区别,Mybatis sql in

    1.mybatis 参数为list时,校验list是否为空 2. mybatis ${}与#{}的区别 简单来说#{} 解析的是占位符?可以防止SQL注入, 比如打印出来的语句 select * fr ...

  10. Effective java -- 2 对于所有对象都通用到方法

    第八条:覆盖equals时请遵守通用约定 什么时候需要覆盖equals方法?类具有自己的逻辑相等概念,并且父类的equals方法不能满足需要.重写equals时需要遵循一下约定: 自反性:非null ...