javascript - 如何模拟模块进行 Angular Testing

标签 javascript angularjs

假设我有一个 Angular 模块定义为

var app = angular.module('app',[dependenceny1Module,dependenceny2Module,dependenceny3Module......])

其中 app 是一个依赖于大量其他模块的模块。 现在对于单元测试,我可以使用模拟模块

mock('app') 

但我必须为所有依赖模块创建模拟模块,如下所示

mockDependency1 = angular.module('dependency1Module')
mockDependency1 = angular.module('dependency2Module')

或者我必须加载包含这些模块的所有脚本文件。

我想知道在这里模拟依赖模块的最佳方法是什么?特别是当依赖模块太多时。

最佳答案

查看requireJs加载您的依赖项。使用 RequireJs,您可以为生产代码和测试代码加载不同的文件。

这是一个(基本)示例。

假设您有一个 javascript 文件,其中定义了您的 angular 模块(例如命名为 app.js):

define(['dependency1Module', 'dependency2Module'], function(dependency1Module, dependency2Module) {
   var app = angular.module('app',['dependenceny1Module', 'dependenceny2Module']);
   return app;
}

模块 dependency1Module, dependency2Module, ... 有类似的设置:

define(function() {
   var module = angular.module('dependenceny1Module');
   return module;
}

现在您需要一个 Bootstrap 文件(例如命名为 bootstrap.js 来定义文件的位置。因此您将有两个 Bootstrap 文件:一个是您的生产代码(使用可能的缩小版本一些库)和一个用于测试目的的版本:

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']);
  });
});

您可以为要模拟的模块定义不同的路径,而不是更改 baseUrl:

paths: {
   dependency1Module: 'path/to.mock/dependency1Module'
}

最后一步是在您的 html 代码(生产或测试)中插入 Bootstrap 文件:

<script type="text/javascript" src="path/to/require.js"></script>
<script type="text/javascript" src="path/to/bootstrap(production|test).js"></script>

这是一个基本的 requirejs 设置。当然,在您可以使用某种 Angular 类型(例如 Controller 、服务等)之前,您还需要为它设置一个 requirejs 模块(并且 require 它,例如在您的 app.js).

关于javascript - 如何模拟模块进行 Angular Testing ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21735563/

相关文章:

javascript - 提交 ajax 表单后未出现成功消息

angularjs - 如何在 ui-router 1.0.0 onBefore 中获取 url 'from' 和 'to'?

javascript - ionic : Typescript Error

javascript - 设置 AngularJS 工厂来共享数据

php - 静默/隐藏的 GET 请求是否可能?

javascript - highcharts.js 更改背景线条的颜色

javascript - 鼠标悬停和鼠标高度上的图像叠加?

javascript - 私有(private)JS函数,这有什么问题吗?

javascript - AngularJS 注入(inject)器问题

javascript - AngularJS - 使用 controllerAs 语法和服务属性的 DRY 双向数据绑定(bind)