2016-02-05 40 views
0

我在互聯網上看到了一些這些問題,但沒有一個答案似乎解決了我的問題。我有一個服務可以在我的服務應用程序中完美工作,但是當我在Karma中測試它時,它沒有被定義。服務沒有定義時,它注入Karma測試 - AngularJS

我在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文件。

編輯 開始懷疑可能是我的大文件中的東西導致問題?這是我的Karma Gulp任務:

gulp.task('karma', ['build'], function(done) { 
karma.start({ 
    configFile: __dirname + '/karma.conf.js', 
    singleRun: true 
}, done); 
}); 

回答

1

當您在測試中實例化模塊時,您不需要函數聲明。

所以不是

beforeEach(function() { 
    module('cst-error-framework'); 
    angular.mock.module('templates'); 
}); 

嘗試

beforeEach(module('cst-error-framework'); 
beforeEach(angular.mock.module('templates'); 
+0

謝謝,這是一個很好的觀點。不過,我做了這個改變,仍然有同樣的問題。現在已經在問題中包含了一些Gulpfile信息。 – MDalt

+0

請檢查更新後的答案 –

+0

這對我有效。但我還需要在beforeEach(注入(function($ injector)) mdErrorHandler = $ injector.get('mdErrorHandler'); console.log(mdErrorHandler); })); ''' – myfashionhub

0

爲了運行測試套件,你必須把ATLEAST單一期待在您的測試套件。

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); 
    }) 
}); 
+0

謝謝。我知道這一點,我只是說明設置,這是失敗的一點。 – MDalt

相關問題