zoukankan      html  css  js  c++  java
  • angular2单元测试

    1、异步支持

    jasmine支持异步操作的测试

    传给beforeEach、afterEach、beforeAll、afterAll、it 方法的函数可以是异步的。

    有三种方法可以实现异步测试:

      方法一:接收一个可选的回调参数

      方法二:promise

      方法三:通过在支持异步的环境中使用 async 关键字

    1.1 回调函数

    代码示例:

    describe("Using callbacks", function() {
        beforeEach(function(done) {
            setTimeout(function() {
                value = 0;
                done();
            },
            1);
        });
        it("should support async execution of test preparation and expectations", function(done) {
            value++;
            expect(value).toBeGreaterThan(0);
            done();
        });
        describe("A spec using done.fail", function() {
            var foo = function(x, callBack1, callBack2) {
                if (x) {
                    setTimeout(callBack1, 0);
                } else {
                    setTimeout(callBack2, 0);
                }
            };
    
            it("should not call the second callBack", function(done) {
                foo(true, done, function() {
                    done.fail("Second callback has been called");
                });
            });
        });
    });

    代码示例讲解:

    在调用beforeEach、afterEach、beforeAll、afterAll、it 时,在传入的函数中填入一个可选的参数(回调函数),异步工作完成时,执行该参数(回调函数)

    在beforeEach传入的函数中添加回调函数参数,其后的 it 将在其回调函数执行之后才会执行

    1.2 promise

    代码示例:

    describe("Using promises", function() {
        if (!browserHasPromises()) {
            return;
        }
        beforeEach(function() {
            return soon().then(function() {
                value = 0;
            });
        });
        it("should support async execution of test preparation and expectations", function() {
            return soon().then(function() {
                value++;
                expect(value).toBeGreaterThan(0);
            });
        });
      function browserHasPromises() {
          return typeof Promise !== 'undefined';
      }
      function soon() {
          return new Promise(function(resolve, reject) {
            setTimeout(function() {
              resolve();
            }, 1);
          });
       }
    });

    示例代码讲解:

    在调用beforeEach、afterEach、beforeAll、afterAll、it 时,传入的函数,可以返回一个promise,这个promise在异步工作完成时解析,如果promise被拒绝,则 describe下的所有 it 都将失败。

    在调用promise的beforeEach返回结果,

      promise返回 resove , it 才会执行,

      promise返回 reject,it 失败

    1.3使用关键字 async/await

    代码示例:

    describe("Using async/await", function() {
        if (!browserHasAsyncAwaitSupport()) {
            return;
        }
        beforeEach(async function() {
            await soon();
            value = 0;
        });
        it("should support async execution of test preparation and expectations", async function() {
            await soon();
            value++;
            expect(value).toBeGreaterThan(0);
        });
    });
    // 此段代码暂时未搞明白,后续补充 describe(
    "long asynchronous specs", function() { beforeEach(function(done) { done(); }, 1000); it("takes a long time", function(done) { setTimeout(function() { done(); }, 9000); }, 10000); afterEach(function(done) { done(); }, 1000); }); function soon() { return new Promise(function(resolve, reject) { setTimeout(function() { resolve(); }, 1); }); } function browserHasPromises() { return typeof Promise !== 'undefined'; } function getAsyncCtor() { try { eval("var func = async function(){};"); } catch(e) { return null; } return Object.getPrototypeOf(func).constructor; } function browserHasAsyncAwaitSupport() { return getAsyncCtor() !== null; }

    示例代码讲解:

    在调用afterEach、beforeEach、afterAll、beforeAll、it 时,传入的函数,可以在支持异步环境中声明为 async 。

    函数内部声明 await xxx(); 在xxx() 返回成功之后,函数内部代码才会执行

    如果在整个套件的不同地方用到了 timeout ,可以在 describe 外边设置全局的 jasmine.DEFAULT_TIMEOUT_INTERVAL(jasmine方法中默认的异步超时时间(毫秒))

  • 相关阅读:
    如何在Altium中下载并添加软件没有的苦文件【转】
    20121124
    变量作用域&函数作用域
    http相关知识
    函数声明和函数表达式
    js中constructor和prototype
    委托模式
    js跨域
    原型和原型链
    javascript 数据类型
  • 原文地址:https://www.cnblogs.com/jing5990/p/12762226.html
Copyright © 2011-2022 走看看