karma與webpack結合

来源:http://www.cnblogs.com/cqhaibin/archive/2016/09/13/5867125.html
-Advertisement-
Play Games

一、必備插件 1.babel:es6的語法支持 2.karma:測試框架 3.jasmine:斷言框架 4.webpack:打包工具 5.karma-webpack:karma調用webpack打包介面的插件 二、實現步驟 1.通過npm安裝上述必備的插件包 2.創建webpack.test.con ...


一、必備插件

1.babel:es6的語法支持

2.karma:測試框架

3.jasmine:斷言框架

4.webpack:打包工具

5.karma-webpack:karma調用webpack打包介面的插件

二、實現步驟

1.通過npm安裝上述必備的插件包

2.創建webpack.test.config.js文件,此文件的配置用於單元測試

var path = require('path');
var webpack = require('webpack');
module.exports={
    module:{
        loaders:[{
            test:/\.js$/,
            loader:'babel',
            query:{
                presets:['es2015']
            },
            exclude:[
               path.resolve( __dirname, '../test' ), path.resolve( __dirname, '../node_modules' )
            ]
        }]
    }
};

註意:

1.此配置參數中沒有entry、output兩個節點的配置,打包的輸入和輸出karma會指定

3. 通過karma init命令創建karma.conf.js配置文件

此文件創建好之後,手動添加對webpack.test.config.js文件的引用,且需要增加如下節點:

1.webpack:設置webpack相關配置參數,也就是導入的webpack.test.config.js的對象

2.webpackMiddleware:設置webpack-dev-middleware(實現webpack的打包,但可以控制輸入和輸出)插件的相關參數

3.preprocessors:增加對webpack引用。

var webpackConfig = require('./webpack.test.config');
module.exports = function(config) {
  config.set({

    // base path that will be used to resolve all patterns (eg. files, exclude)
    basePath: '',

    // frameworks to use
    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
    frameworks: ['jasmine'],


    // list of files / patterns to load in the browser
    files: [
        '../test/index.js'
    ],


    // list of files to exclude
    exclude: [
    ],


    // preprocess matching files before serving them to the browser
    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
    preprocessors: {
      '../test/index.js':['webpack']
    },


    // test results reporter to use
    // possible values: 'dots', 'progress'
    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
    reporters: ['progress'],


    // web server port
    port: 9876,


    // enable / disable colors in the output (reporters and logs)
    colors: true,


    // level of logging
    // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
    logLevel: config.LOG_INFO,


    // enable / disable watching file and executing tests whenever any file changes
    autoWatch: true,


    // start these browsers
    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
    browsers: ['Chrome'],


    // Continuous Integration mode
    // if true, Karma captures browsers, runs the tests and exits
    singleRun: false,

    // Concurrency level
    // how many browser should be started simultaneous
    concurrency: Infinity,

    webpack: webpackConfig,
    webpackMiddleware:{
      noInfo:false
    }
  })
}

 

註意:配置的files與preprocessors節點都是指向單元測試的入口文件(test/index.js)

4.創建需要測試的源碼與單元測試文件

1.src/cache/index.js:cache模塊導出介面,本次只導出的memoryCache.js,代碼如下:

export { default as MemoryCache } from './memoryCache';

2.src/cache/memoryCache.js:實現緩存數據的操作,也是需要單元測試的類,代碼如下:

export default class MemoryCache extends abCache{
    constructor( limit ){
        super( limit );
        this._map = [];
    }
}
var p = MemoryCache.prototype;
p.push = function(key, item){
    var entry = {
        key: key,
        value: item
    };
    this._map.push(entry);
};
p.get = function(key,ruturnEntry){
    for(let item of this._map){
        if(item.key == key){
            return ruturnEntry ? item.value : item;
        }
    }
    return null;
};
p.remove = function(key){
    for(let index in this._map){
        if(this._map[index].key == key){
            this._map.splice(index,1);
            return;
        }
    }
}

 

3.test/cache/memoryCacheTest.js:單元測試用例類

var _memory = require('../../src/cache/index.js').MemoryCache;
describe('memoryCache test',function(){
    var _memeoryCache;
    _memeoryCache = new _memory();
    beforeEach(function(){ //每運行一個it時,之前執行
    });
    it('push',function(){
        var foo = {"name":"foo.Name"};
        _memeoryCache.push("foo",foo);
        var _destFoo = _memeoryCache.get('foo',true);
        expect(_destFoo).toBe(foo);
    });
    it('get', function(){
       expect(_memeoryCache.get('foo',true)).not.toBeNull();
    });
    it('remove',function(){
        _memeoryCache.remove('foo');
        expect(_memeoryCache.get('foo')).toBeNull();
    });
});

 

4.test/index.js:單元測試的入口文件

require('./cache/memoryCahceTest.js');

 

 

5. karma start運行單元測試即可。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、ifconfig命令找不到 解決方法:安裝net-tools.x86_64工具包 yum install net-tools.x86_64 2、iptables無法使用 解決方法:yum install iptables-services vi /etc/sysconfig/iptables # ...
  • 一、安裝GCC編譯環境,如果有則不需要 1)安裝mpc庫 2)安裝gmp庫 3)安裝mpfr庫 4) 安裝GCC 以上GCC的安裝不綴述,可參考各種大神步驟; 二、安裝pcre庫 https://sourceforge.net/projects/pcre/files/pcre/ 下載後解壓併在解壓文 ...
  • 這種情況一般是由於系統防火牆設置問題導致的,這次遇到的系統是centos 7.2,防火牆由iptables改成了firewall,因此停止防火牆的命令應該是: 禁止防火牆啟動的命令應該是: 暫時只寫這麼多,關於防火牆的配置等以後有時間了再說. ...
  • 繼續解決mplayer安裝不上的問題: 多次嘗試後,把源換回官方然後 update&upgrade後安裝 問題解決 時區問題解決: 裡面的第五項 Internationalisation Options --> Change Timezone --> Asia --> Chongqing(找了半天沒 ...
  • 之前裝的是live版 就是沒有桌面的版本,想看能hdmi看電影,於是找了教程安裝omxplayer 用 命令 通過hdmi播放電影 具體安裝過程發在貼吧里了:http://tieba.baidu.com/p/4766986525?see_lz=1 但是依然不能掛字幕.... 無奈今天重裝rasbia ...
  • 近期項目查詢資料庫太慢,持久層也沒有開啟二級緩存,現希望採用Redis作為緩存。為了不改寫原來代碼,在此採用AOP+Redis實現。 目前由於項目需要,只需要做查詢部分: 數據查詢時每次都需要從資料庫查詢數據,資料庫壓力很大,查詢速度慢,因此設置緩存層,查詢數據時先從redis中查詢,如果查詢不到, ...
  • 在前面的幾篇關於Free編程的討論示範中我們均使用了基礎類型的運算結果。但在實際應用中因為需要考慮運算中出現異常的情況,常常會需要到更高階複雜的運算結果類型如Option、Xor等。因為Monad無法實現組合(monad do not compose),我們如何在for-comprehension中 ...
  • ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...