我正在为使用Metronic Theme(http://keenthemes.com/preview/metronic/)开发的应用程序编写Karma Jasmine测试规范 .

我已经安装了测试框架npm模块

  • karma-jasmine

  • 茉莉花核心

然后安装浏览器启动器插件(npm模块)

  • karma-chrome-launcher

  • karma-firefox-launcher

  • phantomjs

  • karma-phantomjs-launcher

然后我安装了Karma Command Line接口和angularjs模块

  • karma-cli

  • 棱角分明

  • angular-ui-router

  • 棱角分明

安装angular-ui-router时,npm显示一条消息,说明已重命名包,并且必须根据this link对package.json进行更改 .

所以我在package.json中的devdependencies如下

"devDependencies": {
"angular": "^1.6.8",
"angular-mocks": "^1.6.8",
"@uirouter/angularjs": "^1.0.3",
"jasmine-core": "^2.8.0",
"karma": "^2.0.0",
"karma-chrome-launcher": "^2.2.0",
"karma-firefox-launcher": "^1.1.0",
"karma-ie-launcher": "^1.0.0",
"karma-jasmine": "^1.1.1",
"karma-phantomjs-launcher": "^1.0.4",
"karma-safari-launcher": "^1.0.0",
"phantomjs": "^2.1.7"

}

更改是由于范围包我们使用 "@uirouter/angularjs": "^1.0.3" 而不是 "angular-ui-router": "^1.0.3"

在我的Karma.conf.js中,我有以下条目

files: [
  './node_modules/angular/angular.js',
  './node_modules/angular-ui-router/angular-ui-router.js',
  './node_modules/angular-mocks/angular-mocks.js',
  './js/main.js', 
  '/home/sridhar/Projects/abcaps/tests/*.js'
],

我的main.js文件包含以下内容

var MetronicApp = angular.module("MetronicApp", [
  "ui.router", "ui.bootstrap", "oc.lazyLoad", "ngSanitize"
]);

我的测试规范包含以下内容

describe('Settings Factory', function() {
  var settings;

//  beforeEach(angular.mock.module('MetronicApp', 'ui.router', 'ui.bootstrap', 'oc.lazyLoad', 'ngSanitize'));
beforeEach(function() {
  module('MetronicApp');
  module(function ($provide) {
  $provide.value('ui.router', serviceMock);
  $provide.value('ui.bootstrap', serviceMock);
  $provide.value('oc.lazyLoad', serviceMock);
  $provide.value('ngSanitize', serviceMock);
  });
});

beforeEach(inject(function(_settings_) {
  settings = _settings_;
}));

it('should exist', function() {
  expect(settings).toBeDefined();
});

});

在运行我的测试时出现错误

Error: [$injector:modulerr] Failed to instantiate module MetronicApp due to:
Error: [$injector:modulerr] Failed to instantiate module ui.bootstrap due to:
Error: [$injector:nomod] Module 'ui.bootstrap' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.

很明显,由于某种原因,我无法模拟模块和服务 . (P.S.我的目标不是测试Metronic提供的功能,而是测试我的团队开发的功能 . 由于主题提供模块decleration,我必须注入它以获得访问我的开发人员编写的控制器)