若有排版结果杂沓,请移步https://www.zybuluo.com/bornkiller/note/24759。
媒介
karma
合营requirejs
举行单元测试,存在官方版本http://karma-runner.github.io/0.8/plus/RequireJS.html,版本虽然陈腐,然则功用完成没有题目。单元测试中设置文件
test-main.js
与现实main.js
存在差别,所以单元测试保证模块的可靠性,详细临盆环境下注重模块可一般加载就好。。- 下面代码仅为部份需特别注重代码,别的字段省略。
package.json
{
"dependencies": {
},
"devDependencies": {
"karma": "^0.12.19",
"karma-chrome-launcher": "^0.1.4",
"karma-cli": "^0.0.4",
"karma-jasmine": "^0.1.5",
"karma-requirejs": "^0.2.2",
"requirejs": "^2.1.14"
},
}
为单元测试而装置的node模块。
karma.config
推荐在现实运用时,用NPM在项目中再装置一次,更轻易明白一些。
// Karma configuration
// Generated on Tue Jul 29 2014 10:24:37 GMT+0800 (中国标准时间)
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', 'requirejs'],
// list of files / patterns to load in the browser
files: [
{pattern: 'lib/**/*.js', included: false},
{pattern: 'service/**/*.js', included: false},
{pattern: 'test/**/*spec.js', included: false},
'test-main.js'
],
});
};
-
basePath
运用默认值即可。 -
framework
如上填写后,页面会自动引入断言库和加载库,不在须要手动引入。
<script type="text/javascript" src="/base/node_modules/requirejs/require.js"></script>
<script type="text/javascript" src="/base/node_modules/karma-requirejs/lib/adapter.js"></script>
<script type="text/javascript" src="/base/node_modules/karma-jasmine/lib/jasmine.js"></script>
<script type="text/javascript" src="/base/node_modules/karma-jasmine/lib/adapter.js"></script>
- 须要注重的是
files
字段,included
设置为false
,示意不会直接经由过程<script>
标签直接显式引入剧本,假如直接引入,会致使define
无定义,致使报错。served
字段默以为true
,示意会供应对应静态文件,能够异步加载。
test-main.js
karma init
敕令执行时,是不是天生requirejs 模板文件,务必需要点是,天生模板以下:
- 第一部份——测试文件模块化
var allTestFiles = [];
var TEST_REGEXP = /(spec|test)\.js$/i;
var pathToModule = function(path) {
return path.replace(/^\/base\//, '').replace(/\.js$/, '');
};
Object.keys(window.__karma__.files).forEach(function(file) {
if (TEST_REGEXP.test(file)) {
// Normalize paths to RequireJS module names.
allTestFiles.push(pathToModule(file));
}
});
功用实在很简单,将spec.js
或许test.js
末端的文件去掉后缀,现实上为模块化测试文件,后续运用requirejs
加载。
- 第二部份——requirejs设置
require.config({
// Karma serves files under /base, which is the basePath from your config file
baseUrl: '/base',
paths : {
'jquery' : 'service/jquery',
'movie' : 'service/movie'
},
// dynamically load all test files
deps: allTestFiles,
shim : {
'jquery' : {
deps : [],
exports : 'jQuery'
}
},
// we have to kickoff jasmine, as it is asynchronous
callback: window.__karma__.start
});
须要注重的是,baseUrl
必需/base
开首,示意karma webserver
根目录。注重deps
字段,此处为测试文件异步加载,因为测试文件跟模块文件在两个文件夹下,所以,发起经由过程path
设置模块,防止文件构造构造杂沓。
service.spec.js
define(['jquery','movie'], function($,movie) {
describe('just checking', function() {
it('works for app', function() {
expect($).toBeDefined();
});
it('works for moive type', function () {
expect(movie.type).toEqual('comedy')
});
it('works for movie name', function () {
expect(movie.name).toEqual('500 days with summer');
});
});
});
包装上,跟通例测试文件有差别,模块必需由define
引入内部, 与describe it没有显著的位置分列请求。
题目交换
总的来说,觉得挺烦琐的,从karma
设置文件,requirejs
设置文件,测试文件都须要举行特别处置惩罚。能够陈说上有题目,若有疑问
QQ: 491229492
Email: 491229492@qq.com,说明交换即可。