🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
开发完M层,下面,我们开始将CM进行对接. # C层 app/scripts/controllers/teacher/index.js ``` 'use strict'; /** * @ngdoc function * @name webAppApp.controller:TeacherIndexCtrl * @description * # TeacherIndexCtrl * Controller of the webAppApp */ angular.module('webAppApp') .controller('TeacherIndexCtrl', function ($scope, teacher) { // 使用回调函数来获取数据 teacher.all(function(teachers) { $scope.teachers = teachers; }); }); ``` 保存。 但是。。。。好像shell并没有监测到我们的文件发生了变化,也没有为我们自动查错。 这是,由于我们在`controllers`文件夹增加了子文件夹,而`yoman`的设计是:把所有的控制器全部写在`controllers`文件夹中。在小型的项目中,这样做是可以的。但考虑到以后我们可能会涉及一些与权限控制相关的中型项目,我们认为每一个`action`对应一个控制器更有利于分工。 如果还需要`grunt`为我们自动检测代码,并且自动测试的话,那么我们需要如下配置`gruntfile.js`. <hr /> > 以下内容修改原文件较多,修改前需要做好备份 步骤如下: 1. 打开`gruntfile.js` 2. 查找`/scripts/{`关键字, 并选中 3. 按ctrl + d 选中所有的字段。 4. 将其更改为`/scripts/**/{` 用同样的方法,将`spec/{` 更改为: `spec/**/{` 保存后,执行ctrl+c,然后再执行`grunt serve`来重新启动服务。 去除示例代码及示例单元测试代码,以防报错。 > 在团队开发中,我们的核心成员将完成项目的初始化工作。所以如果前面你感觉学习有些吃力,那么大可以跳过。我们在github中,已经为大家准备好修改后可用的gruntfile.js文件。 ## 单元测试 原则上,由于我们在C层中直接调用了M层的方法。而我们在开发C层时,又假设了两点:1.M层已经开发完毕,并按我们的需求进行了单元测试。2.M层是由其它团队人员开发的。所以,C层在进行单元测试时,是不需要对调用的M层的方法进行测试的。 所以在只有以上代码的前提下,是不需要进行单元测试的。事实上,我们在进行程序开发时,C层的作用仅是调用调用这个,调用调用那个。是个指挥官,而不进行逻辑运算。所以在这种假设的前提下,C层的重点在于不能出现语法错误。我们的grunt又十分人性化的在代码保存时,提示我们语法是否出错。所以,在M层开发比较给力的前提下,C层的代码量则会少很多。 在此,我们为了巩固上一小节中的模拟$http请求的内容,模拟进行M层的调用,给出以下测试代码,供选学。 <hr /> test/spec/controllers/teacher/index.js 完整代码: ``` 'use strict'; describe('Controller: TeacherIndexCtrl', function() { // load the controller's module beforeEach(module('webAppApp')); var TeacherIndexCtrl, scope, $httpBackend; // Initialize the controller and a mock scope beforeEach(inject(function($controller, $rootScope, _$httpBackend_) { scope = $rootScope.$new(); $httpBackend = _$httpBackend_; // 定义请求 URL var url = 'resource/teacher/index/all.json'; // 定义返回数据。注意此处的json数据的写法与xxx.json文件中的json数据的写的法的异同。 var data = { teachers: [ { username: 'zhangsan', name: '张三', sex: 0, email: 'zhangsan@yunzhiclub.com' }, { username: 'lisi', name: '李四', sex: 1, email: 'lisi@yunzhiclub.com' }, { username: 'wangwu', name: '王五', sex: 0, email: 'wangwu@yunzhiclub.com' } ] }; // 进行模似数据请求配置.当请求方法为GET,资源名为resource/teacher/index/all.json, 返回data数据. $httpBackend.when('GET', url).respond(data); TeacherIndexCtrl = $controller('TeacherIndexCtrl', { $scope: scope // place here mocked dependencies }); })); it('测试M层的静态数据', function() { // 模拟数据请求 $httpBackend.flush(); // 期望:返回的数组长度为3 expect(scope.teachers.length).toBe(3); }); }); ``` 保存后,shell不报错,修改并测试成功.