我在互联网上看到了一些这样的问题,但没有一个答案似乎解决了我的问题。我有一个在我服务的应用程序中完美运行的服务,但是当我在Karma中测试它时,它没有被定义。
我在src
文件夹中有我的模块和相关的控制器,指令和服务。该文件的结构如下:
angular.module('cst-error-framework', ['md.alerts', 'md.input', 'md.modals']);
angular.module('md.alerts', [])
.directive(//..associated directives here
angular.module('md.input', [])
//blah blah blah
angular.module('md.modals', [])
//directives and controllers
.factory('mdErrorHandler', function () {
//contents here
});
我知道这看起来有点麻烦,但我还有其他原因在一个档案中。
然后我对mdErrorHandler
的规范如下:
describe('Service errorHandler', function () {
beforeEach(function() {
module('cst-error-framework');
angular.mock.module('templates');
});
var mdErrorHandler;
beforeEach(inject(function(_mdErrorHandler_){
mdErrorHandler = _mdErrorHandler_;
console.log(mdErrorHandler);
}));
这是我的karma.conf.js
:
module.exports = function(config) {
config.set({
basePath: '',
frameworks: ['jasmine'],
files: [
'bower_components/jquery/dist/jquery.js',
'bower_components/angular/angular.js',
'bower_components/angular-sanitize/angular-sanitize.js',
'bower_components/angular-mocks/angular-mocks.js',
'dist/cst-error-framework.js',
'dist/cst-error-framework.css',
'src/**/templates/*.html',
'src/helpers/*.js',
'src/**/test/*.spec.js'
],
preprocessors : {
'src/**/templates/*.html': 'ng-html2js'
},
ngHtml2JsPreprocessor: {
stripPrefix: 'src/',
moduleName: 'templates'
},
exclude: [],
port: 9876,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: [process.env.TRAVIS ? 'Firefox' : 'Chrome'],
singleRun: false
});
'use strict';
};
然后当我进行业力测试时,我的mdErrorHandler
未被定义,因此console.log
的结果只是[]
。
知道发生了什么事吗?是否与Karma加载东西的顺序有关?希望避免必须完全重构我的主.js
文件。
修改的 开始怀疑我的gulpfile中的某些内容可能导致问题?这是我的Karma Gulp任务:
gulp.task('karma', ['build'], function(done) {
karma.start({
configFile: __dirname + '/karma.conf.js',
singleRun: true
}, done);
});
答案 0 :(得分:1)
在测试中实例化模块时,您不需要函数声明。
所以而不是
beforeEach(function() {
module('cst-error-framework');
angular.mock.module('templates');
});
试
beforeEach(module('cst-error-framework');
beforeEach(angular.mock.module('templates');
答案 1 :(得分:0)
为了运行测试套件,您必须在测试套件中添加至少一个期望值。
describe('Service errorHandler', function() {
beforeEach(function() {
module('cst-error-framework');
console.log(1);
});
var mdErrorHandler;
beforeEach(inject(function(_mdErrorHandler_) {
mdErrorHandler = _mdErrorHandler_;
console.log(mdErrorHandler);
}));
it('do for nothing', function() {
expect(true).toBe(true);
})
});