• JS 单元测试


    JS单元测试,我工作时主要以mocha + chai 下面时具体的文档:

    mocha:

      https://mochajs.org/#asynchronous-code

    Chai:

      http://chaijs.com/api/bdd/#method_ownproperty

    还是比较简单的所以可以自己查看文档:

    例子基于requirejs,并且配置需基于你自己文件目录,红色代码请留意下

    要测试的一个排序函数,对对象数组进行升、降序排序

    define(['underscore'], function(_) {
      function util() {};
        //对象数组,根据item中某字段排序
        util.sortBy = function () {
        var obj = arguments[0],  key = arguments[1];
        if(!_.isArray(obj) || !key) {
          return obj;
        }    
        var sort = arguments[2], j = 1, temp = {};     
        //交换函数   
        function swap (obj, index) {
          temp = obj[index];
          obj[index] = obj[index+1];
          obj[index+1] = temp;
        }
        //sort 默认从小到大 (采用冒泡)
        obj.forEach(function() {
          for(var i = 0, length = obj.length-j; i < length; i++) {
            if (sort && sort.toLowerCase() ==="desc") {  //降序
              if (!obj[i][key]) {
                if (obj[i+1][key]) {
                  swap(obj, i);         
                }
              } else if (obj[i+1][key] && obj[i+1][key] > obj[i][key]) {            
                swap(obj, i);
              }
            } else { //默认升序
              if (obj[i][key]) {
                if (obj[i+1][key]) {
                  if(obj[i][key] > obj[i+1][key]){                
                    swap(obj, i);
                  }              
                } else {              
                  swap(obj, i);
                }         
              }
            }        
          }
          j++;
        }); 
        return obj;     
      }
    
      return util;
    })

    测试页面代码,具体的配置需要根据你自己的环境去配置

    <!DOCTYPE html>
    <html>
        <head>
            <title>H5 test</title>
            <link rel="stylesheet" type="text/css" href="../../node_modules/mocha/mocha.css">
            <script src="../asset/src/h5/vendor/require.js">    
            </script>
        </head>
        <body>
            <div id="mocha"></div>
        </body>
        <script type="text/javascript">     
            (function(){
                function nodePath(path) {                
                    return '../../node_modules/' + path + '/' + path;
                };
    
                function modulePath(path) {
                    return './lib/' + path;
                };
                 function vendorPath(path) {
                     return '../asset/src/h5/vendor/' +path;
                 };
                function widgetPath(path) {
                    return '../asset/src/widget/' + path;
                };
    
                requirejs.config({
                    urlArgs: Date.now(),
                    baseUrl: './',
                    shim: {
                        mocha: {
                    exports: 'mocha'
                  } 
                    },
                    paths: {
                        'underscore': vendorPath('underscore'),
                        'mocha': nodePath('mocha'),
                        'chai': nodePath('chai'),
                        'testUtil': modulePath('testUtil'), 
                        'util': widgetPath('util')
                    }
                });
                
                requirejs(['mocha', 'chai'], function(mocha, chai) {                
                    mocha.setup('bdd');
    
                    window.expect = chai.expect;
    
                    //加载测试模块
                    require(['testUtil'], function() {    
    
                        if(window.mochaPhantomJS) {
                            window.mochaPhantomJS.run();
                        } else {
                            mocha.run();
                        }
                    })
                });
            })();
        </script>
    </html>

     具体的测试代码:

    describe('util', function(util) {
      var util;
      before(function(done){
        require(['util'], function(one) {
          util = one;  
          done();
        });
      })
    
      describe('#sortBy', function() {
        it('obj类型数组asc排序', function() {
          //expect(util.sortBy([{a:1, b: 1}, {a:4, b:5}, {a:3}, {a:2}, {b:2}, {a:5}], 'a') == [{b:2}, {a:1, b:1}, {a:2}, {a:3}, {a:4, b:5}, {a:5}]).to.be.true;;
          var str='';
          util.sortBy([{a:1, b: 1}, {a:4, b:5}, {a:3}, {a:2}, {b:2}, {a:5}], 'a').forEach(function(item) {
            str = str + item.a +",";
          })
    
          expect(str === "undefined,1,2,3,4,5,").to.be.true;
        })
    
        it('obj类型数组desc排序', function() {
          var str='';
          util.sortBy([{a:1, b: 1}, {a:4, b:5}, {a:3}, {a:2}, {b:2}, {a:5}], 'a', 'desc').forEach(function(item) {
            str = str + item.a +",";
          })
          
          expect(str ==="5,4,3,2,1,undefined,").to.true;
        });
    
        it('ddd', function() {
          expect(1==2).to.true;
        })
      });
    });

     运行结果图

     

  • 相关阅读:
    unreal python commandlet print log
    三维空间坐标系变换公式
    Android Volley初探:Volley基本用法
    Android View学习笔记(四):Scroller的原理剖析及使用(下)
    Android View学习笔记(三):Scroller的原理剖析及使用(上)
    Android View学习笔记(二):View滑动方式总结
    Android View学习笔记(一):View基础知识
    获取NavigationBar状态与高度
    解决RecyclerView.getChildAt(Position)崩溃
    RecyclerView瀑布流的那些坑
  • 原文地址:https://www.cnblogs.com/kangaoxiaoshi/p/5701980.html
Copyright © 2020-2023  润新知