Gulp 测试找不到模块
Gulp test can not find module
我使用 gulp angular 生成了我的 Web 应用程序。然后我创建了一个服务,想测试一下。
模块文件是app.module.js
angular.module('text', []);
服务文件是text.service.js
(function () {
'use strict';
angular.module('text')
.factory('description',TextService);
TextService.$inject = ['$http']
function TextService($http) {
return {
QueryStaticText: queryStaticText
};
function queryStaticText(link) {
return link;
}
}
})();
测试文件是text.service.spec.js
'use strict';
describe('TextService', function () {
var description;
beforeEach(function () {
module('text');
inject(function (_description_) {
description = _description_;
});
});
it('should return text', function () {
expect(description.QueryStaticText("Hello")).toEqual("Hello anu");
});
});
在控制台中我执行了 gulp 测试,我收到了错误消息
[22:02:44] Using gulpfile /Volumes/Developer/angularjs/project/gulpfile.js
[22:02:44] Starting 'test'...
[22:02:45] Starting Karma server...
INFO [karma]: Karma v0.12.31 server started at http://localhost:9876/
INFO [launcher]: Starting browser PhantomJS
INFO [PhantomJS 1.9.8 (Mac OS X)]: Connected on socket 1KW_uYCk45moVKwfgAd2 with id 19804685
PhantomJS 1.9.8 (Mac OS X) ERROR
Error: [$injector:nomod] Module 'text' 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.
http://errors.angularjs.org/1.3.12/$injector/nomod?p0=text
at /Volumes/Developer/angularjs/project/bower_components/angular/angular.js:1769
/Volumes/Developer/angularjs/project/gulp/unit-tests.js:30
throw err;
文本模块没有加载,如何加载?
beforeEach(module('text'));
beforeEach(inject(function (_description_) {
description = _description_;
}));
基本上,模块和注入的 return 值需要作为 beforeEach
的参数。参见 https://docs.angularjs.org/guide/module#unit-testing
您似乎没有按顺序在 Karma 中加载文件。在你里面 karma.conf.js 应该有一个文件列表。加载应用程序模块,然后加载 javascript 的其余部分。这是一个 post 有 same problem.
例如:
files: [
'bower_components/angular/angular.js',
'bower_components/angular-mocks/angular-mocks.js',
'bower_components/angular-animate/angular-animate.js',
'app/**/*.module.js', // Loads all files with .module.js
'app/**/*.js', // Load the rest of your .js angular files
'test/**/*.js' // Load your tests
],
使用 angularFilesort
按依赖项排序文件:
// gulp/unit-tests.js
...
// around line 36 inserted the following line:
.pipe($.angularFilesort())
所以应该看起来像:
gulp.src(srcFiles)
.pipe($.angularFilesort())
.pipe(concat(function(files) {
callback(bowerDeps.js
.concat(_.pluck(files, 'path'))
.concat(htmlFiles)
.concat(specFiles));
}))
我使用 gulp angular 生成了我的 Web 应用程序。然后我创建了一个服务,想测试一下。
模块文件是app.module.js
angular.module('text', []);
服务文件是text.service.js
(function () {
'use strict';
angular.module('text')
.factory('description',TextService);
TextService.$inject = ['$http']
function TextService($http) {
return {
QueryStaticText: queryStaticText
};
function queryStaticText(link) {
return link;
}
}
})();
测试文件是text.service.spec.js
'use strict';
describe('TextService', function () {
var description;
beforeEach(function () {
module('text');
inject(function (_description_) {
description = _description_;
});
});
it('should return text', function () {
expect(description.QueryStaticText("Hello")).toEqual("Hello anu");
});
});
在控制台中我执行了 gulp 测试,我收到了错误消息
[22:02:44] Using gulpfile /Volumes/Developer/angularjs/project/gulpfile.js
[22:02:44] Starting 'test'...
[22:02:45] Starting Karma server...
INFO [karma]: Karma v0.12.31 server started at http://localhost:9876/
INFO [launcher]: Starting browser PhantomJS
INFO [PhantomJS 1.9.8 (Mac OS X)]: Connected on socket 1KW_uYCk45moVKwfgAd2 with id 19804685
PhantomJS 1.9.8 (Mac OS X) ERROR
Error: [$injector:nomod] Module 'text' 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.
http://errors.angularjs.org/1.3.12/$injector/nomod?p0=text
at /Volumes/Developer/angularjs/project/bower_components/angular/angular.js:1769
/Volumes/Developer/angularjs/project/gulp/unit-tests.js:30
throw err;
文本模块没有加载,如何加载?
beforeEach(module('text'));
beforeEach(inject(function (_description_) {
description = _description_;
}));
基本上,模块和注入的 return 值需要作为 beforeEach
的参数。参见 https://docs.angularjs.org/guide/module#unit-testing
您似乎没有按顺序在 Karma 中加载文件。在你里面 karma.conf.js 应该有一个文件列表。加载应用程序模块,然后加载 javascript 的其余部分。这是一个 post 有 same problem.
例如:
files: [
'bower_components/angular/angular.js',
'bower_components/angular-mocks/angular-mocks.js',
'bower_components/angular-animate/angular-animate.js',
'app/**/*.module.js', // Loads all files with .module.js
'app/**/*.js', // Load the rest of your .js angular files
'test/**/*.js' // Load your tests
],
使用 angularFilesort
按依赖项排序文件:
// gulp/unit-tests.js
...
// around line 36 inserted the following line:
.pipe($.angularFilesort())
所以应该看起来像:
gulp.src(srcFiles)
.pipe($.angularFilesort())
.pipe(concat(function(files) {
callback(bowerDeps.js
.concat(_.pluck(files, 'path'))
.concat(htmlFiles)
.concat(specFiles));
}))