摘要:前言配合进行单元测试,存在官方版本,版本虽然陈旧,但是功能实现没有问题。单元测试中配置文件与实际存在差异,所以单元测试保证模块的可靠性,具体生产环境下注意模块可正常加载就好。。为单元测试而安装的模块。
如有排版效果混乱,请移步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如上填写后,页面会自动引入断言库和加载库,不在需要手动引入。
需要注意的是files字段,included设置为false,表示不会直接通过标签直接显式引入脚本,如果直接引入,会导致define无定义,导致报错。served字段默认为true,表示会提供对应静态文件,可以异步加载。
test-main.jskarma 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.jsdefine(["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,注明交流即可。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/85248.html
摘要:的另一种形式测试踩坑之路代码覆盖率单元测试的代码覆盖率统计,是衡量测试用例好坏的一个的方法。 showImg(https://segmentfault.com/img/remote/1460000012564211?w=640&h=280); 项目地址: diana文档地址: http://muyunyun.cn/diana/ 造轮子的意义 为啥已经有如此多的前端工具类库还要自己造轮...
摘要:我写过一些开源项目,在开源方面有一些经验,最近开到了阮老师的微博,深有感触,现在一个开源项目涉及的东西确实挺多的,特别是对于新手来说非常不友好最近我写了一个,旨在从多方面快速帮大家搭建一个标准的库,本文将已为例,介绍写一个开源库的知识 我写过一些开源项目,在开源方面有一些经验,最近开到了阮老师的微博,深有感触,现在一个开源项目涉及的东西确实挺多的,特别是对于新手来说非常不友好 show...
摘要:模块化编程,已经成为一个迫切的需求。随着网站功能逐渐丰富,网页中的也变得越来越复杂和臃肿,原有通过标签来导入一个个的文件这种方式已经不能满足现在互联网开发模式,我们需要团队协作模块复用单元测试等等一系列复杂的需求。 随着网站逐渐变成互联网应用程序,嵌入网页的Javascript代码越来越庞大,越来越复杂。网页越来越像桌面程序,需要一个团队分工协作、进度管理、单元测试等等......开发...
摘要:前端工程化的演化。前端较为流行的单元测试,等自动化测试自动化测试是软件通过模拟浏览器,对页面进行操作,判断是否产生预想的效果。 前端工程化 前端工程化的概念在近些年来逐渐成为主流构建大型web应用不可或缺的一部分,在此我通过以下这三方面总结一下自己的理解。 为什么需要前端工程化。 前端工程化的演化。 怎么实现前端工程化。 为什么需要工程化 随着近些年来前端技术的不断发展,越...
摘要:模块中定义的全局变量只作用于该文件内部,不污染其他模块。由纯编写的部分称为内建模块,例等模块部分使用编写。兼容多种模块规范检测是否为或者检测是否为或环境定义为普通模块将模块执行结果挂载在对象下 1.为什么要CommonJS规范 javascript存在的缺点 没有模块系统 标准库比较少 没有标准接口 缺乏包管理系统 CommonJS规范的提出,弥补了javascript没有标准的缺...
阅读 2443·2021-09-23 11:52
阅读 2153·2021-09-02 15:41
阅读 3261·2019-08-30 10:47
阅读 2138·2019-08-29 17:14
阅读 2521·2019-08-29 16:16
阅读 3327·2019-08-28 18:29
阅读 3634·2019-08-26 13:30
阅读 2784·2019-08-26 10:49