| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408 |
- /**
- * Created with JetBrains PhpStorm.
- * User: dongyancen
- * Date: 13-10-12
- * Time: 下午1:18
- * To change this template use File | Settings | File Templates.
- */
- /*
- * matchFunctions
- * */
- describe("matchFunctions examples", function () {
- //toBe 相当于===,处理简单字面值和变量
- it("toBe相当于===", function () {
- var a = 12;
- var b = a;
- expect(a).toBe(b);
- expect(a).not.toBe(null);
- expect(false == 0).toBe(true);
- });
- it("toBe不能当==用", function () {
- expect(false).toBe(0);
- });
- //toEqual 处理简单字面值和变量,而且可以处理对象,数组
- it("toEqual可以处理字面值,变量和对象", function () {
- var a = 12;
- expect(a).toEqual(12);
- var foo = {key: "key"};
- var bar = {key: "key"};
- expect(foo).toEqual(bar);
- var arr1 = [];
- arr1["p1"] = "string1";
- var arr2 = [];
- arr2["p1"] = "string1";
- var obj = {};
- obj["p1"] = "string1";
- expect(arr1).toEqual(arr2);
- expect(arr1).toEqual(obj);
- });
- //toMatch 按正则式检索。
- it("toMatch匹配正则式", function () {
- var message = "foo bar baz";
- expect(message).toMatch(/bar/);
- expect(message).toMatch("bar");
- expect(message).not.toMatch(/quux/);
- expect(message).toMatch(/^f/);
- expect(message).not.toMatch(/f$/);
- });
- //toBeDefined 是否已声明且赋值
- it("toBeDefined检测变量非undefined", function () {
- var a = { key: "key"};
- expect(a.key).toBeDefined();
- expect(a.foo).not.toBeDefined();
- //expect(c).not.toBeDefined(); //未声明出错
- var b;
- expect(b).not.toBeDefined();
- //对象.未声明属性.not.toBeDefined(); 通过
- //未声明变量.not.toBeDefined(); 报错
- });
- //toBeLessThan 数值比较,小于
- //
- //toBeGreaterThan 数值比较,大于
- //
- //toBeCloseTo 数值比较时定义精度,先四舍五入后再比较
- it("toBeCloseTo数值比较,指定精度,先四舍五入再比较", function () {
- var pi = 3.1415926, e = 2.78;
- expect(pi).toBeCloseTo(e, 0);
- expect(pi).not.toBeCloseTo(e, 0.1);
- });
- //toThrow 检验一个函数是否会抛出一个错误
- it("toThrow检验一个函数是否会抛出一个错误", function () {
- var foo = function () {
- return 1 + 2;
- };
- var bar = function () {
- return a + 1;
- };
- expect(foo).not.toThrow();
- expect(bar).toThrow();
- });
- });
- /*
- * Spy
- * */
- describe("Spy examples", function () {
- //Spy 存储函数的被调用情况和参数(函数监视器,记录被调用情况,但函数并不真执行)
- describe("对spy函数的测试", function () {
- var foo, bar = null;
- beforeEach(function () {
- foo = {
- setBar: function (value) {
- bar = value;
- }
- };
- spyOn(foo, 'setBar'); //foo为spy函数
- foo.setBar(123);
- foo.setBar(456, 'another param');
- });
- it("测试foo函数是否被调用过", function () {
- expect(foo.setBar).toHaveBeenCalled();
- });
- it("测试foo函数被调用的次数", function () {
- expect(foo.setBar.calls.length).toEqual(2);
- });
- it("测试foo函数被调用时传入的参数", function () {
- expect(foo.setBar).toHaveBeenCalledWith(123);
- expect(foo.setBar).toHaveBeenCalledWith(456, 'another param');
- });
- it("上一次被调用的参数", function () {
- expect(foo.setBar.mostRecentCall.args[0]).toEqual(456);
- });
- it("所有被调用的情况存在一个数组里", function () {
- expect(foo.setBar.calls[0].args[0]).toEqual(123);
- });
- it("函数并未真的执行", function () {
- expect(bar).toBeNull();
- });
- });
- //Spy addCallThrough 函数监视器,但函数真的执行
- describe("对spy函数的测试,函数真的执行", function () {
- var foo, bar, fetchedBar;
- beforeEach(function () {
- foo = {
- setBar: function (value) {
- bar = value;
- },
- getBar: function () {
- return bar;
- }
- };
- //spyOn(foo, "setBar"); //如果加上这句,setBar不真的执行,后两个spec不通过
- spyOn(foo, 'getBar').andCallThrough();
- foo.setBar(123);
- fetchedBar = foo.getBar();
- });
- it("测试foo中getBar函数是否被调用过", function () {
- expect(foo.getBar).toHaveBeenCalled();
- });
- it("foo中setBar函数真的执行了", function () {
- expect(bar).toEqual(123);
- });
- it("foo中getBar函数真的执行了", function () {
- expect(fetchedBar).toEqual(123);
- });
- });
- //Spy andReturn 函数监视器,函数不真的执行。指定监视的函数的返回值
- describe("A spy, when faking a return value", function () {
- var foo, bar, fetchedBar;
- beforeEach(function () {
- foo = {
- setBar: function (value) {
- bar = value;
- },
- getBar: function () {
- return bar;
- }
- };
- spyOn(foo, 'getBar').andReturn(745); //指定getBar函数返回745
- foo.setBar(123);
- fetchedBar = foo.getBar();
- });
- it("测试foo中getBar函数是否被调用过", function () {
- expect(foo.getBar).toHaveBeenCalled();
- });
- it("不影响未被监视的其它函数", function () {
- expect(bar).toEqual(123);
- });
- it("指定的返回值745", function () {
- expect(fetchedBar).toEqual(745);
- });
- });
- //Spy addCallFake 替代被监视的函数,原函数不执行
- describe("替代被监视的函数,原函数不执行", function () {
- var foo, bar, fetchedBar;
- beforeEach(function () {
- foo = {
- setBar: function (value) {
- bar = value;
- },
- getBar: function () {
- alert("frostbelt");
- return bar;
- }
- };
- spyOn(foo, 'getBar').andCallFake(function () {
- return 1001;
- });
- foo.setBar(123);
- fetchedBar = foo.getBar();
- });
- it("测试foo中getBar函数是否被调用过", function () {
- expect(foo.getBar).toHaveBeenCalled();
- });
- it("不影响未被监视的其它函数", function () {
- expect(bar).toEqual(123);
- });
- it("getBar被addCallFake指定的匿名函数代替,getBar不执行", function () {
- expect(fetchedBar).toEqual(1001);
- });
- });
- //自己create一个被监视函数
- //
- //jasmine.createSpy(functionId)
- describe("自己造一个被监视函数", function () {
- var whatAmI;
- beforeEach(function () {
- whatAmI = jasmine.createSpy('whatAmI');
- whatAmI("I", "am", "a", "spy");
- });
- it("有个id,是createSpy的传入函数,用于报错", function () {
- expect(whatAmI.identity).toEqual('whatAmI')
- });
- it("是否被调用", function () {
- expect(whatAmI).toHaveBeenCalled();
- });
- it("被调用的次数", function () {
- expect(whatAmI.calls.length).toEqual(1);
- });
- it("被调用的参数", function () {
- expect(whatAmI).toHaveBeenCalledWith("I", "am", "a", "spy");
- });
- it("最近一次被调用", function () {
- expect(whatAmI.mostRecentCall.args[0]).toEqual("I");
- });
- });
- //有时需要监视一个对象的很多方法,用createSpyObj添加方法数组
- //jasmine.createSpyObj(obj, methodArray)
- describe("有时需要监视一个对象的很多个方法,用createSpyObj添加数组", function () {
- var tape;
- beforeEach(function () {
- tape = jasmine.createSpyObj('tape', ['play', 'pause', 'stop', 'rewind']);
- tape.play();
- tape.pause();
- tape.rewind(0);
- });
- it("tape对象的这四个方法已被定义", function () {
- expect(tape.play).toBeDefined();
- expect(tape.pause).toBeDefined();
- expect(tape.stop).toBeDefined();
- expect(tape.rewind).toBeDefined();
- });
- it("四个方法是否被调用", function () {
- expect(tape.play).toHaveBeenCalled();
- expect(tape.pause).toHaveBeenCalled();
- expect(tape.rewind).toHaveBeenCalled();
- expect(tape.stop).not.toHaveBeenCalled();
- });
- it("被调用时传入的参数", function () {
- expect(tape.rewind).toHaveBeenCalledWith(0);
- });
- });
- });
- /*
- * instanceof
- * */
- describe("instanceof examples", function() {
- //jasmine.any 类型判断。instanceof
- it("相当于instanceof", function() {
- expect({}).toEqual(jasmine.any(Object));
- expect(12).toEqual(jasmine.any(Number));
- });
- it("也可以用于spy", function() {
- var foo = jasmine.createSpy('foo');
- foo(12, function() {
- return true
- });
- expect(foo).toHaveBeenCalledWith(jasmine.any(Number), jasmine.any(Function));
- //foo被调用时的参数 类型判断
- });
- });
- /*
- * jasmine.Clock.useMock() jasmine自己控制时间,实现异步调试,减少等待
- * jasmine.Clock.tick(n:uint) 向前n毫秒
- * */
- describe("useMock + tick examples", function() {
- var timerCallback;
- beforeEach(function() {
- timerCallback = jasmine.createSpy('timerCallback');
- jasmine.Clock.useMock();
- });
- it("setTimeout", function() {
- setTimeout(function() {
- timerCallback();
- }, 100);
- expect(timerCallback).not.toHaveBeenCalled();
- jasmine.Clock.tick(101);
- expect(timerCallback).toHaveBeenCalled();
- });
- it("setInterval", function() {
- setInterval(function() {
- timerCallback();
- }, 100);
- expect(timerCallback).not.toHaveBeenCalled();
- jasmine.Clock.tick(101);
- expect(timerCallback.callCount).toEqual(1);
- jasmine.Clock.tick(50);
- expect(timerCallback.callCount).toEqual(1);
- jasmine.Clock.tick(50);
- expect(timerCallback.callCount).toEqual(2);
- });
- //注:在这种环境下setTimeout和setInterval的callback为同步的,系统时间不再影响执行
- });
- /*
- *
- * runs(function) waitsFor(function, message, millisec) Jasmine异步调试
- * */
- describe("runs+waitsFor examples", function() {
- var value, flag;
- it("这里写你测试需要异步的代码", function() {
- runs(function() {
- flag = false;
- value = 0;
- setTimeout(function() {
- flag = true;
- }, 500);
- });
- waitsFor(function() { //如果750 毫秒之内返回的flag为true,则执行runs方法,否则报错,返回并且显示第二个参数的内容
- value++;
- return flag;
- }, "说明", 750);
- runs(function() {
- expect(value).toBeGreaterThan(0);
- });
- });
- });
- describe(" example2", function() {
- //这里使用的是SpecHelper里面自定义的断言
- it('helper',function(){
- expect(true).toBe(true);
- });
- });
|