天天看點

angular+karma+bower搭建自動化測試環境angular+karma+bower搭建自動化測試環境

angular+karma+bower搭建自動化測試環境

目錄

  • angularkarmabower搭建自動化測試環境
    • 目錄
    • express建立項目
    • bower
      • bower的安裝
      • Git
      • bower的使用
      • bower的下載下傳目錄
    • Karma
    • 開始測試

在開發過程中要保證開發代碼的品質,單元測試是一種很有效的方式,特别是針對像angular這種可以自定義指令元件特性的架構更加有必要。下面将介紹配置angular自動化測試環境的具體步驟,至于安裝node和express這些過程就省略不提了。

express建立項目

h:\work> express project
           

先随便建立一個項目,就叫project吧,于是我得到了如下的結構

angular+karma+bower搭建自動化測試環境angular+karma+bower搭建自動化測試環境

bower

bower的安裝

接下來,讓我們來安裝bower為我們管理js

h:\work\project> npm install --save-dev bower
           

bower子產品安裝好後,就可以用bower來安裝我們要用的架構了。

不過,安裝前先建一個配置檔案bower.json,執行以下指令。

h:\work\project> bower init
           

我就一路預設下去了,很快就得到了一個配置檔案bower.json。

這個檔案的功能跟package.json差不多,在我們以後執行bower install也用的上。

// project>>bower.json
{
  "name": "project",
  "version": "0.0.0",
  "authors": [
    ".."
  ],
  "license": "MIT",
  "ignore": [
    "**/.*",
    "node_modules",
    "bower_components",
    "test",
    "tests"
  ]
}
           

Git

在使用bower安裝架構之前,我們首先要安裝git,git的安裝很簡單,這裡是官方下載下傳

bower的使用

現在,可以用bower安幾個常用的架構

h:\work\project> bower install --save jquery angular angular-resource bootstrap angular-mocks
           

預設的bower下載下傳下來的架構是安在根目錄的bower_components下面,這時候我的目錄變成了這樣

angular+karma+bower搭建自動化測試環境angular+karma+bower搭建自動化測試環境

bower的下載下傳目錄

對與bower的預設下載下傳目錄,我們可以通過兩種方式來修改。

第一種最簡單,在根目錄下建立一個.bowerrc檔案

//.bowerrc
 {
  "directory": "app/lib"
}
           

這樣,所有bower下載下傳的架構都會到檔案指定的位置

第二種比較麻煩一點,但更加的靈活,那就是用grunt幫我們處理

通過上面的指令,安裝grunt和grunt-bower-task子產品。

grunt安裝好後,在根目錄下建立檔案Gruntfile.js

//Gruntfile.js
module.exports = function(grunt) {

  grunt.initConfig({
    jshint: {
      files: ['Gruntfile.js', 'src/**/*.js', 'test/**/*.js'],
      options: {
        globals: {
          jQuery: true
        }
      }
    },
    watch: {
      files: ['<%= jshint.files %>'],
      tasks: ['jshint']
    }
  });

  grunt.loadNpmTasks('grunt-contrib-jshint');
  grunt.loadNpmTasks('grunt-contrib-watch');

  grunt.registerTask('default', ['jshint']);

};
           

省得麻煩,我直接去grunt官網把例子copy了過來,接下來在去grunt-bower-task官網把例子拷過來,具體的用法可以去官網看。于是得到了以下檔案

//Gruntfile.js
module.exports = function(grunt) {

  grunt.initConfig({
    bower: {
    install: {
      options: {
        targetDir: 'app/lib',
        layout: 'byComponent',
        install: true,
        verbose: false,
        cleanTargetDir: false,
        cleanBowerDir: false,
        bowerOptions: {}
      }
    }
  }
  });

  grunt.loadNpmTasks('grunt-bower-task');

  grunt.registerTask('default', ['bower']);

};
           
h:\work\project> grunt
           

配置好後來執行試一下,得到這個結果代表成功了。

Running "bower:install" (bower) task
>> Installed bower packages
>> Copied packages to h:\work\project\app\lib

Done, without errors.
           

Karma

有bower為我們安裝架構,接下來就是我們的主角karma,karma的安裝和配置很簡單。

先通過npm安裝它。

h:\work\project> npm install --save-dev karma
           

安裝完後,生成配置檔案karma.conf.js

h:\work\project> karma init
           

還是一路預設下去,在删除掉注釋後,得到這個檔案

// project>>karam.conf.js
module.exports = function(config) {
  config.set({
    basePath: '',
    frameworks: ['jasmine'],
    files: [
    ],
    exclude: [
    ],
    preprocessors: {
    },
    reporters: ['progress'],
    port: ,
    colors: true,
    logLevel: config.LOG_INFO,
    autoWatch: true,
    browsers: ['Chrome'],
    singleRun: false
  })
}
           

接下來我們要修改file數組,設定執行karma時監控的檔案。

現在先來看下目錄

angular+karma+bower搭建自動化測試環境angular+karma+bower搭建自動化測試環境

我們要監控app下面所有的js,進行測試,是以檔案修改後如下

// project>>karma.conf.js
{
...
files: [
      "app/lib/jquery/dist/jquery.js",
      "app/lib/angular/angular.js",  //必要
      "app/lib/angular-resource/angular-resource.js",
      "app/lib/angular-mocks/angular-mocks.js",  //必要

      "app/js/**/*.js",
      "app/views/**/*.js",
      "app/components/**/*.js"
    ]
 ...
 }
           

配置的具體用法請參照Karma官網

到此,karma的配置全部完成。

開始測試

接下來我們要做的就是編寫測試,比如要測試如下代碼

// project>>app>>js>>app.js
angular.module('app', [])
    .controller('appCtr', ['$scope', function ($scope) {
        $scope.add = function (a, b) {
            return a + b;
        }
    }])
           

再編寫符合jasmine文法的相應代碼去測試

// project>>app>>js>>test>>app.test.js
describe('now will test app.js',function(){
    var scope;

    beforeEach(module('app'));
    beforeEach(inject(function($rootScope,$controller){
        scope = $rootScope.$new();
        $controller('appCtr',{$scope:scope});

    }))
    it('add 1+1 should get sum 2',function(){
        expect(scope.add(,)).toEqual();
    })
})
           

以上的為了測試appCtr裡的add方法,現在需要執行下面指令開開啟測試

由于我設定的是谷歌浏覽器,此時會打開浏覽器,看到karma的可視化測試界面,在指令行會獲得下面這個結果

:::WARN [watcher]: Pattern "h:/work/project/app/lib/jquery/
dist/jquery.js" does not match any file.
   :::WARN [watcher]: Pattern "h:/work/project/app/views/**/*.
js" does not match any file.
   :::WARN [watcher]: Pattern "h:/work/project/app/components/
**/*.js" does not match any file.
   :::WARN [karma]: No captured browser, open http://localhost
:/
   :::INFO [karma]: Karma v0 server started at http://lo
calhost:/
   :::INFO [launcher]: Starting browser Chrome
   :::INFO [Chrome  (Windows  )]: Connected on
 socket LQeKLh1yghfUG0K5AAAA with id 
Chrome  (Windows  ): Executed  of  SUCCESS ( secs /  sec
Chrome  (Windows  ): Executed  of  SUCCESS ( secs / 
 secs)
           

可以看到測試成功通過,在前面karma.conf.js我設定了autoWatch: true,此時就能展現karma的自動化測試了,現在随意的修改監控檔案裡面的js,karma會實時的傳回測試結果,至此,大功告成。這裡是相關代碼

繼續閱讀