http://karma-runner.github.io/0.8/plus/RequireJS.html


karma 不是测试框架,只是一个运行测试框架的服务器

karma测试的原理是,将所有的文件都加载,然后执行对应的测试文件

使用到的前端自动化工具:
    grunt bower npm 等

安装依赖:
  1. "karma": "^0.13.15",
  2. "karma-chrome-launcher": "^0.2.1",
  3. "karma-jasmine": "^0.3.6",
  4. "karma-mocha": "^0.2.0", //与jasmine 二选一即可,建议使用jasmine,mocha需要其他的断言包
  5. "karma-requirejs": "^0.2.2",
初始化配置文件:
  1. karma init

配置说明:
    
  1. // Karma configuration
  2. // Generated on Tue Nov 10 2015 09:39:31 GMT+0800 (中国标准时间)
  3. module.exports = function (config) {
  4. config.set({
  5. // base path that will be used to resolve all patterns (eg. files, exclude)
  6. basePath: '',
  7. // frameworks to use
  8. // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
  9. frameworks: ['jasmine', 'requirejs'],
  10. // 配置要加载的文件
  11. //字符串形式的表示 通过<script>标签进行加载
  12. //对象形式的必须包含pattern、included属性,pattern进行匹配文件,included为true表示通过requirejs进行加载(后面会结束配置说明),否则通过script标签进行加载
  13. files: [
  14. 'app/bower_components/angular/angular.js',
  15. 'app/bower_components/angular-route/angular-route.js',
  16. 'app/bower_components/angular-mocks/angular-mocks.js',
  17. 'app/components/**/*.js',
  18. 'app/view*/**/*.js',
  19. {pattern: 'app/define/*.js', included: false},
  20. {pattern: 'app/test/*.js', included: false},
  21. 'test-main.js'
  22. ],
  23. // list of files to exclude
  24. exclude: [
  25. '**/*.swp'
  26. ],
  27. proxies: {
    //'/static': 'http://gstatic.com',
    '/log': 'http://localhost:3000' //避免跨域,测试异步请求时如果指定完整url就是跨域,会出错,如果只写路径会请求到karma服务器localhsot:9876/
    },

  28. // preprocess matching files before serving them to the browser
  29. // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
  30. preprocessors: {},
  31. // test results reporter to use
  32. // possible values: 'dots', 'progress'
  33. // available reporters: https://npmjs.org/browse/keyword/karma-reporter
  34. reporters: ['progress'],
  35. // web server port
  36. port: 9876,
  37. // enable / disable colors in the output (reporters and logs)
  38. colors: true,
  39. // level of logging
  40. // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
  41. logLevel: config.LOG_INFO,
  42. // enable / disable watching file and executing tests whenever any file changes
  43. autoWatch: true,
  44. // start these browsers
  45. // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
  46. browsers: ['Chrome'],
  47. // Continuous Integration mode
  48. // if true, Karma captures browsers, runs the tests and exits
  49. singleRun: false
  50. })
  51. }
requirejs配置
  1. /**
  2. * Created by weichunhe on 2015/11/10.
  3. */
  4. var tests = [];
  5. for (var file in window.__karma__.files) { //这里的文件路径已经包含了 /base了
  6. if (window.__karma__.files.hasOwnProperty(file)) {
  7. if (/test1\.js$/.test(file)) {
  8. tests.push(file);
  9. }
  10. }
  11. }
  12. console.log(window.__karma__.files);
  13. console.log(tests);
  14. requirejs.config({
  15. // Karma serves files from '/base'
  16. baseUrl: '/base/app/define',
  17. paths: {},
  18. shim: {},
  19. // ask Require.js to load these files (all our tests)
  20. deps: tests, //这里只包含需要测试的文件就可以了
  21. // start test run, once Require.js is done
  22. callback: window.__karma__.start
  23. });

启动:
cd node_modules/.bin/
karma.cmd start ../../karma.conf.js

karma:
    files: 根据正则表达式去遍历文件系统,将符合条件的文件在/base下面通过web提供服务
            将included指定为false时通过requirejs加载,如果指定为true 会出现  Uncaught Error: Mismatched anonymous define() module 这是因为在加载requirejs之前通过script标签进行加载的
    使用requirejs时:
        所有在deps里面的文件都会去加载执行,所以deps里面放的只是要测试的文件就可以了,要么define、要么直接写,不能require,这是异步了
    angular 的 $controllerProvider.reigster 在 angular启动之后注册的controller测试时通过angular-mock就加载不进来了

如果是所有controller都在angular bootstrap之前注册了,就可以使用 angular-mocks ,否则还是不要用了,太麻烦了;直接angular测试
  1. $injector = angular.injector(['app']); //执行这步之后 注册的controller可以injector获取到
  2. require('app').register.controller('testCtrl', function (name) {
  3. console.log('controller', name);
  4. });
  5. $injector.invoke(function ($controller) {
  6. $controller('testCtrl', {name: 'testCtrl'});
  7. });

karma+requirejs+angular 测试的更多相关文章

  1. angular测试-Karma + Jasmine配置

    首先讲一下大致的流程: 需要node环境,首先先要安装node,node不会?请自行搜索.版本>0.8 安装node完成之后先要测试下npm是否测试通过,如下图所示 首先看下目录结构 目录为:F ...

  2. karma和jasmine的测试(包括angular测试)

    本篇博客主要就是针对现在日新月异的技术和快速开发,测试被很多人忽略,其实在开发中如何保证代码的质量以及逻辑的完整性,测试显得十分重要,本文就是负责karma+jasmine来测试. 1.搭建测试的环境 ...

  3. 浅谈HTML5单页面架构(一)——requirejs + angular + angular-route

    心血来潮,打算结合实际开发的经验,浅谈一下HTML5单页面App或网页的架构. 众所周知,现在移动Webapp越来越多,例如天猫.京东.国美这些都是很好的例子.而在Webapp中,又要数单页面架构体验 ...

  4. H5单页面架构:requirejs + angular + angular-route

    说到项目架构,往往要考虑很多方面: 方便.例如使用jquery,必然比没有使用jquery方便很多,所以大部分网站都接入类似的库: 性能优化.包括加载速度.渲染效率: 代码管理.大型项目需要考虑代码的 ...

  5. AngularJS进阶(二十五)requirejs + angular + angular-route 浅谈HTML5单页面架构

    requirejs + angular + angular-route 浅谈HTML5单页面架构 众所周知,现在移动Webapp越来越多,例如天猫.京东.国美这些都是很好的例子.而在Webapp中,又 ...

  6. Angular测试遇到的小坑

    Angular测试遇到的小坑 Error: Expected to be running in 'ProxyZone', but it was not found 检查doneFn的写法是否正确,位置 ...

  7. 用Karma和Jasmine测试Angular应用

    TEST: Before you've written any of the code, you know how you want it to behave. You have a specific ...

  8. karma mocha angular angular-mock 测试

    describe('工具方法测试', function () { var utilsModule; beforeEach(function () { module('Admin'); // modul ...

  9. karma+requirejs

    下面的介绍以karma能正常运行为前提,看karma系列文章:http://www.cnblogs.com/laixiangran/tag/Karma/ 目录结构 步骤 安装 npm install ...

随机推荐

  1. cocos2d-x中绘制3D图形--3D ToolKit for cocos2dx实现原理

    首先:了解具体情况请看这里:https://github.com/wantnon2/3DToolKit-for-cocos2dx 在看代码之前,最好还是先把项目git下来执行一下demoproject ...

  2. Qt实现Windows远程控制

    实现方式为server端+client. server端为一个进程.client为图形界面程序. client连接时设置server端的Ip地址,以及须要显示的长度和宽度(不能超过相应server端显 ...

  3. 【前端】JavaScript继承实现的四种方式

    转载请注明出处:http://www.cnblogs.com/shamoyuu/p/4770235.html 一.继承的实现方法 1.原型链继承 这个继承最为简单,它的实现原理是,每一个AO对象都有一 ...

  4. openstack (4)---部署Glance镜像服务,Nova计算服务

    一.Glance Glance是Openstack项目中负责镜像管理的模块,其功能包括虚拟机镜像的查找.注册和检索等. Glance提供Restful API可以查询虚拟机镜像的metadata及获取 ...

  5. C# oracle 参数传递的多种方式 留着复习

    ORA-01036 非法的变量名/编号,(解决) 博客分类: oracle SQL  下边的代码就会造成  ORA-01036 非法的变量名/编号 cmd.CommandText = "SE ...

  6. 19_传智播客iOS视频教程_类和对象

    什么是类?什么是对象? 看的见.摸的着.拿过来就可以直接使用.例如报纸就是一个对象. 学生这个东西可不可以只是指一个?就只有那一个才是学生.不是的,学生是有很多个的.它是对一类人的统称.类是统称.所以 ...

  7. Feature分支(转载)

    转自:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137602623300 ...

  8. 【WIP_S2】递归

    创建: 2018/01/14    递归  定义  自己召唤自己  通用形式  if (基本情况A的处理) {     ...     return 值A  } else if (基本情况B的处理) ...

  9. 编写第一Spring程序

    构建Spring项目 通过https://start.spring.io/来构建项目,在这里我选择了两个依赖,web 和 Actuator. 项目结构 通过eclipse导入项目,可以看到这是一个标准 ...

  10. P4451 [国家集训队]整数的lqp拆分

    #include <bits/stdc++.h> using namespace std; typedef long long LL; inline LL read () { LL res ...