• 【转】用systemJS+karma+Jasmine+babel环境去编写简单的ES6工程


    原文链接:http://www.cnblogs.com/shuoer/p/7779131.html

    用systemJS+karma+Jasmine+babel环境去编写简单的ES6工程

    首先解释下什么事systemJS、karma、Jasmine、babel

    • SystemJS是万能动态模块加载器github
    • Karma是一个基于Node.js的JavaScript测试执行过程管理工具(Test Runner)。该工具可用于测试所有主流Web浏览器,也可集成到CI(Continuous integration)工具,也可和其他代码编辑器一起使用。这个测试工具的一个强大特性就是,它可以监控(Watch)文件的变化,然后自行执行,通过console.log显示测试结果。karma官网
    • Jasmine是单元测试框架,jasmine很有意思的提出了BDD(Behavior Driven Development)行为驱动开发,测试先行的概念jasmine官网
    • Babel 是一个 JavaScript 编译器。Babel 用于转化你的 JavaScript 代码babel官网

    初始化一个工程

    //创建一个工程目录并切换到该目录下
    mkdir karmatest && cd karmatest
    //初始化一个工程,得到package.json来管理我们项目中的包依赖
    npm init

    安装karma

    //首先需要全局安装karma的命令行工具(已经有的略过)
    npm install -g karma-cli
    //安装karma到我当前项目中并添加到本地的依赖
    npm install karma --save-dev
    //初始化karma得到karma的配置文件karma.conf.js
    karma init


    先执行下karma start 看看karma安装成功了没?好像报错了!

    从错误提示可以看出来karma 连接jasmine-core的时候报错了,缺少jasmine-core包!俩字,安装!

    //安装jasmine-core并添加到本地的版本依赖中
    npm install jasmine-core --save-dev
    //安装成功之后我们再执行下karma start测试下karma是否安装成功
    karma start


    可以看出我们karma安装成功了,只是没有任何的测试用例,接下来我们配置下karma.conf.js和写下我们的测试用例

    //修改karma.conf.js两处
    //第一处告诉karma业务代码和测试代码在哪
    files: [
            './src/utils/*.js',
            './test/**/*.spec.js'
        ]
    //第二处把karma的持续集成模式打开,让karma去自动捕获浏览器测试结束和退出
    singleRun: true

    接下来我们创建src和test目录和编写业务代码和测试用例

    //创建业务代码在src下的utils下创建index.js代码如下
    function add(num){
        return ++num
    }
    //创建我们的测试用例test目录下编写测试用例test.spec.js代码如下
    //此处测试用例是jasmine的语法请参阅jasmine的官网
    //jasmine 官网https://jasmine.github.io/edge/introduction.html
    describe('测试加法函数',function(){
        it('测试add(1)是否等于2',function(){
            expect(add(1)).toEqual(2);
        })
    })
    //保存好之后我们再次执行karma start

    ok 到此处我们的单元测试已经做好了,我们编辑package.json让项目执行npm test就可以跑我们写好的测试用例

    {
      "name": "karmatest",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "karma start"//此处支持npm test跑我们的karma start
      },
      "author": "",
      "license": "ISC",
      "devDependencies": {
        "jasmine-core": "^2.8.0",
        "karma": "^1.7.1",
        "karma-jasmine": "^1.1.0",
        "karma-phantomjs-launcher": "^1.0.4"
      }
    }

    配置systemJS+Babel动态引用并解析我们的es6代码

    由于systemJS需要我们起一个server所以我们先装个server
    server你可以随意起,能起来就行,此处我用的是serve

    安装本地serve

    //全局安装一个serve
    npm install serve -g
    //将serve安装进我们的项目中并添加进项目的版本依赖中
    npm install serve --save-dev
    //测试serve是否安装成功
    serve


    安装systemJS

    //安装systemjs和systemjs-plugin-babel并添加进版本依赖中
    npm install systemjs systemjs-plugin-babel --save-dev

    在src目录下创建一个indexclass.js文件添加如下内容

    /**
     * 引入我们单元测试创建的add方法
     */
    import './utils/index.js'
    /**
     * 创建一个person类
     */
    class Person{
        /**
         * [constructor description]
         * @param  {[type]} name [名称]
         * @param  {Number} num  [调用次数]
         * @return {[type]}      [description]
         */
        constructor(name,num=0){
            this.name = name
            this.num = num
        }
        /**
         * [speak 该方法返回当前实例的名称和调用次数]
         * @return {[type]} [description]
         */
        speak(){
            this.num = add(this.num)
            return `我的名字叫${this.name}你调了我${this.num}次`
        }
    }
    /**
     * [create  用于创建person类的实例化]
     * @param  {[type]} name [description]
     * @return {[type]}      [description]
     */
    export const create = (name,num)=>{
        let p = new Person(name,num)
        return p
    }

    在我们项目的根目录创建index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <!-- 首先把systemjs引进来 -->
        <script src="./node_modules/systemjs/dist/system.js"></script>
    </head>
    <body>
        <script>
            /**
             * [SystemJS.config  SystemJS的配置文件]
             * [baseURL ]
             * [map     ]
             * @type {String}
             */
            SystemJS.config({
                baseURL:'./',
                transpiler:'plugin-babel',
                map:{
                    'plugin-babel':'node_modules/systemjs-plugin-babel/plugin-babel.js',
                    'systemjs-babel-build':'node_modules/systemjs-plugin-babel/systemjs-babel-browser.js'
                }
            });
            /**
             * [用SystemJS去加载我们的es6模块文件]
             * @param  {[type]} compoent [description]
             * @return {[type]}          [description]
             */
            SystemJS.import('./src/indexclass.js').then(compoent=>{
                /**
                 * [compoent component 是我们indexclass文件export的方法此处我们export了个create方法]
                 * [create   次方法是一个类似的工厂函数,用于创建出一个一个的实例]
                 * @type {[type]}
                 */
                // 实例化一个zhangsan
                var zhangsan = compoent.create('zhangsan')
                // 实例化一个lisi
                var lisi = compoent.create('lisi')
                console.log(zhangsan.speak())
                console.log(zhangsan.speak())
                console.log(zhangsan.speak())
                console.log(lisi.speak())
            })
        </script>
    </body>
    </html>

    ok 最后再配置下package.json文件支持npm start 启动服务
    完整的package.json如下

    {
      "name": "karmatest",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "start":"serve",
        "test": "karma start"
      },
      "author": "",
      "license": "ISC",
      "devDependencies": {
        "jasmine-core": "^2.8.0",
        "karma": "^1.7.1",
        "karma-jasmine": "^1.1.0",
        "karma-phantomjs-launcher": "^1.0.4",
        "serve": "^6.4.0",
        "systemjs": "^0.20.19",
        "systemjs-plugin-babel": "0.0.25"
      }
    }

    测试下我们的成果

    //跑单元测试
    npm test
    //启动服务
    npm start


  • 相关阅读:
    java在线聊天项目0.7版 连接多个客户端问题,开启多个客户端后服务器端只接收到一个 对各种异常的补充处理
    java在线聊天项目0.6版 解决客户端关闭后异常问题 dis.readUTF()循环读取已关闭的socket
    指针 引用 举例:通过指针变量访问整型变量
    字符串数组 输入3个字符串,要求按由小到大的字母顺序输出; 输入n个学生的姓名和学号到字符串数组中,在输入一个姓名,如果班级有该生则返回其信息,否则返回本班无此人
    java在线聊天项目0.5版 解决客户端向服务器端发送信息时只能发送一次问题 OutputStreamWriter DataOutputStream socket.getOutputStream()
    java在线聊天项目0.4版本 制作服务端接收连接,客户端连接功能 新增客户端窗口打开时光标指向下边文本域功能,使用WindowListener监听WindowAdapter
    java在线聊天项目0.3版本 制作客户端窗体,实现发送按钮和回车发送信息功能,使用ActionListener监听事件中actionPerformed方法(用内部类和匿名内部类两种方法)
    java在线聊天项目0.2版本 制作客户端窗体,使用swing(用户界面开发工具包)和awt(抽象窗口工具包) BorderLayout布局与GridLayout布局不同之处 JPanel设置大小
    java在线聊天项目0.1版本 制作客户端窗体,使用swing(用户界面开发工具包)和awt(抽象窗口工具包)
    HashCode的作用原理和实例解析
  • 原文地址:https://www.cnblogs.com/xuanbiyijue/p/7856309.html
Copyright © 2020-2023  润新知