我正在为使用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,我必须注入它以获得访问我的开发人员编写的控制器)