一、必備插件 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運行單元測試即可。