AngularJs Modules详解及示例代码(2)

  一个module可以列出它所依赖的其他module。依赖一个module,意味着被请求(required)的module(被依赖的)必须在进行请求(requiring)module(需要依赖其他module的module,请求方)加载之前加载完成。换一种说法,被请求的module的configuration block会在请求的module的configuration block执行前执行(before the configuration blocks or the requiring module,这里的or怎么解释呢?)。对于run block也是这个道理。每一个module只能够被加载一次,即使有多个其他module需要(require)它。 

  d) Asynchronous Loading(异步加载)

  module是管理$injector配置的方法之一,不用对加载脚本到VM做任何事情。现在已经有现成的项目专门用于处理脚本加载,也可以用到angular中。因为module在加载的过程中不做任何事情,它们可以按照任意的顺序被加载到VM中。脚本加载器可以利用这个特性,进行并行加载。 

           五、Unit Testing(单元测试)

  在单元测试的最简单的形式中,其中一个是在测试中实例化一个应用的子集,然后运行它们。重要的是,我们需要意识到对于每一个injector,每一个module只会被加载一次。通常一个应用只会有一个injector。但在测试中,每一个测试用例都有它的injector,这意味着在每一个VM中,module会被多次加载。正确地构建module,将对单元测试有帮助,正如下面的例子:

  在这个例子中,我们准备假设定义如下的module:

angular.module('greetMod', []). factory('alert', function($window) { return function(text) {   $window.alert(text); }; }) .value('salutation', 'Hello') .factory('greet', function(alert, salutation) { return function(name) {    alert(salutation + ' ' + name + '!'); }; });

  让我们写一些测试用例:

describe('myApp', function() { // 加载应用响应的module,然后加载指定的将$window重写为mock版本的测试module, // 这样做,当进行window.alert()时,测试器就不会因被真正的alert窗口阻挡而停止 //这里是一个在测试中覆盖配置信息的例子 beforeEach(module('greetMod', function($provide) {//这里看来是要将真正的$window替换为以下的东东   $provide.value('$window', {     alert: jasmine.createSpy('alert')   }); })); // inject()会创建一个injector,并且注入greet和$window到测试中。 // 测试不需要关心如何写应用,只需要关注如何测试应用。 it('should alert on $window', inject(function(greet, $window) {   greet('World');   expect($window.alert).toHaveBeenCalledWith('Hello World!'); })); // 这里是在测试中通过行内module和inject方法来覆盖配置的方法 it('should alert using the alert service', function() {   var alertSpy = jasmine.createSpy('alert');   module(function($provide) {     $provide.value('alert', alertSpy);   });   inject(function(greet) {     greet('World');     expect(alertSpy).toHaveBeenCalledWith('Hello World!');   }); }); });

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wzfdzz.html