Riz*_*rif 8 javascript angularjs
让我们说我有一个角度模块定义为
var app = angular.module('app',[dependenceny1Module,dependenceny2Module,dependenceny3Module......])
Run Code Online (Sandbox Code Playgroud)
app是一个依赖于大量其他模块的模块.现在进行单元测试我可以使用模拟模块
mock('app')
Run Code Online (Sandbox Code Playgroud)
但我必须为所有依赖模块创建模拟模块,如下所示
mockDependency1 = angular.module('dependency1Module')
mockDependency1 = angular.module('dependency2Module')
Run Code Online (Sandbox Code Playgroud)
或者我必须加载包含这些模块的所有脚本文件.
我想知道什么是模拟出依赖模块的最佳方法?特别是当依赖模块太多时.
查看requireJs以加载您的依赖项.使用RequireJs,您可以为生产代码和测试代码加载不同的文件.
这是一个(基本)例子.
假设您有一个javascript文件,用于定义您的角度模块(例如命名app.js):
define(['dependency1Module', 'dependency2Module'], function(dependency1Module, dependency2Module) {
var app = angular.module('app',['dependenceny1Module', 'dependenceny2Module']);
return app;
}
Run Code Online (Sandbox Code Playgroud)
模块dependency1Module,dependency2Module,...有类似的设置:
define(function() {
var module = angular.module('dependenceny1Module');
return module;
}
Run Code Online (Sandbox Code Playgroud)
现在你需要一个引导程序文件(例如命名bootstrap.js来定义文件的位置.所以你将有两个引导程序文件:一个是你的生产代码(使用可能的某些库的缩小版本)和一个用于测试目的的版本:
require.config({
baseUrl: "path/to/production|test scripts",
paths: {
angular: 'path/to/angular',
jquery: 'path/to/jquery',
},
shim: {
angular: {
exports: 'angular',
deps: ['jquery']
}
}
});
require(["angular", "app", ], function(angular, app) {
angular.element(document).ready(function() {
angular.bootstrap(document, ['app']);
});
});
Run Code Online (Sandbox Code Playgroud)
baseUrl您可以为要模拟的模块定义不同的路径,而不是更改它:
paths: {
dependency1Module: 'path/to.mock/dependency1Module'
}
Run Code Online (Sandbox Code Playgroud)
最后一步是在你的html代码(生产或测试)中插入bootstrap文件:
<script type="text/javascript" src="path/to/require.js"></script>
<script type="text/javascript" src="path/to/bootstrap(production|test).js"></script>
Run Code Online (Sandbox Code Playgroud)
这是一个基本的requirejs设置.当然,在你可以使用某种角度类型(例如控制器,服务......)之前,你还需要为它设置一个requirejs模块(require例如你的app.js).
| 归档时间: |
|
| 查看次数: |
637 次 |
| 最近记录: |