/** * @file karma自动化测试配置 * @author fe.xiaowu@gmail.com */ var url = require('url'); /** * mock一个server供测试使用 * * @param {Object} req request * @param {Object} res response * @param {Function} next 下一路由 * * @example * 请求 /api/mock 参数如: * timeout - 超时时间, 默认 0 * statusCode - 状态码, 默认 200 * response - 响应内容, 默认 {} * dataType - 响应格式, 默认 json */ var httpServer = function (req, res, next) { if (req.url.indexOf('/api/mock') === -1) { return next(); } var data = url.parse(req.url, true).query; setTimeout(function () { res.statusCode = data.statusCode || 200; res.setHeader('content-type', data.contentType || 'json'); res.end(data.response || '{}'); }, data.timeout || 0); }; /** * 源文件 * * @type {Array} */ var sourceFileMap = [ 'src/layui.js', 'src/lay/modules/jquery.js', 'src/lay/modules/carousel.js', 'src/lay/modules/code.js', 'src/lay/modules/element.js', 'src/lay/modules/flow.js', 'src/lay/modules/form.js', 'src/lay/modules/laydate.js', 'src/lay/modules/layedit.js', 'src/lay/modules/layer.js', 'src/lay/modules/laypage.js', 'src/lay/modules/laytpl.js', 'src/lay/modules/table.js', 'src/lay/modules/tree.js', 'src/lay/modules/upload.js', 'src/lay/modules/util.js', 'src/lay/modules/mobile/zepto.js', 'src/lay/modules/mobile/layer-mobile.js', 'src/lay/modules/mobile/upload-mobile.js' ]; /** * 测试覆盖率文件, 要忽略 jquery.js、zepto.js * * @type {Object} */ var coverageFileMap = {}; sourceFileMap.filter(function (uri) { return !/(jquery|zepto)\.js$/.test(uri); }).forEach(function (uri) { coverageFileMap[uri] = ['coverage']; }); module.exports = function (config) { return { // 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 // Important: 下列数组中文件将『逆序载入』 frameworks: ['mocha', 'chai', 'chai-sinon'], // list of files / patterns to load in the browser files: sourceFileMap.concat('test/**/*.js').concat({ pattern: 'src/css/**/*', included: false }, { pattern: 'src/font/**/*', included: false }, { pattern: 'src/images/**/*', included: false }), // list of files to exclude exclude: [], client: { mocha: { // mocha测试超时6秒 timeout: 1000 * 6 } }, // preprocess matching files before serving them to the browser // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor preprocessors: coverageFileMap, // test results reporter to use // possible values: 'dots', 'progress' // available reporters: https://npmjs.org/browse/keyword/karma-reporter reporters: [ 'mocha' // 'coverage' ], coverageReporter: { // specify a common output directory dir: '.', reporters: [ // { type: 'html', subdir: 'report-html' }, { type: 'lcov', subdir: 'coverage' }, { type: 'text-summary' } ] }, // 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 // Note: 如果要调试Karma,请设置为DEBUG logLevel: config.LOG_INFO, // start these browsers // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher browsers: [ 'PhantomJS' ], // enable / disable watching file and executing tests whenever any file changes // Note: 代码改动自动运行测试,需要singleRun为false autoWatch: false, // Continuous Integration mode // if true, Karma captures browsers, runs the tests and exits // 脚本调用请设为 true singleRun: true, middleware: ['httpServer'], plugins: ['karma-*', { 'middleware:httpServer': [ 'factory', function () { return httpServer; } ] }] }; };