美文网首页
JS简单断言函数

JS简单断言函数

作者: roylai | 来源:发表于2017-03-14 21:44 被阅读0次

    JS简单断言函数

    示例HTML

    
    <html>
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <div id="result"></div>
    </body>
    </html>
    
    

    直接上函数

    (function () {
        var queue = [], paused = false, results;
        this.test = function (name, fn) {
            // 封装任务送入队列
            // 任务主要做的事情为每个test加一个ul,方便插入断言语句
            queue.push(function () {
                results = document.getElementById('results');
                results = assert(true, name).appendChild(
                    document.createElement('ul')
                );
                fn();
            });
    
            // 测试剩余任务
            runTest();
        };
        
        // 暂停函数
        this.pause = function () {
            paused = true;
        };
    
        // 异步完成后继续任务队列
        this.resume = function () {
            paused = false;
            setTimeout(runTest, 1);
        };
    
        // 调控任务函数
        function runTest() {
    
            // 异步断言过程:先pause()标记暂停,这时异步操作进行,等异步操作执行完毕后回调函数出发resume()函数,标记非暂停runtest下一个任务。
    
            // 如果任务处于非暂停状态,且仍有剩余任务
            if (!paused && queue.length) {
    
                // FIFO出一个任务,并且执行
                queue.shift()();
                
                // 同步测试兼容
                if (!paused) {
                    resume();
                }
            }
        }
        this.assert = function assert(value, desc) {
            var li = document.createElement('li');
            li.className = value ? "pass" : "fail";
            li.appendChild(document.createTextNode(desc));
            results.appendChild(li);
            if (!value) {
                li.parentNode.parentNode.className = "fail";
            }
            return li;
        }
    })();
    
    window.onload = function () {
        test('async test #1', function () {
            pause();
            setTimeout(function(){
                assert(true,"First test completed");
                resume();
            },1000)
        });
        test('async test #2', function(){
            pause();
            setTimeout(function(){
                assert(true,"second test completed");
                resume();
            },1000)
        });
    }
    
    

    相关文章

      网友评论

          本文标题:JS简单断言函数

          本文链接:https://www.haomeiwen.com/subject/ydxknttx.html