javascript - 'undefined' is not an object (evaluating 'app.register.service') when using requirejs, angularamd and karma -
in our angularjs project, using requirejs + angularamd manage dependencies. application works fine, we're having problems when running jasmine tests using karma.
this error:
typeerror: 'undefined' not object (evaluating 'app.register.service') @ /home/bcatarino/projects/spr/target-grunt/js/app/model/pressrelease.js:3 it seems our app not correctly injected our test.
the source code test:
'use strict'; define(['angularamd', 'pressrelease'], function(angularamd, pressrelease) { describe('pressreleasemodel test', function () { var scope, pressreleasemodel; var inject = angularamd.inject; inject(function (pressrelease) { pressreleasemodel = pressrelease; }); it('should add non-existing recipient', function(pressrelease) { expect(pressreleasemodel.get().recipients.length, 0); }); }); }); pressrelease coded this:
define([ 'app', 'angularamd' ], function(app, angularamd) { app.register.service('pressrelease', function() { //stuff going on here } ); }); so app.register undefined , can't figure out why.
as requested, here's karma.conf:
module.exports = function(config) { config.set({ basepath: '../../../', files: [ {pattern: 'js_components/angular/angular.js', watched: false, included: false}, {pattern: 'js_components/angular-mocks/angular-mocks.js', included: false}, {pattern: 'js_components/angularamd/angularamd.js', included: false}, {pattern: 'js_components/angular-ui-router/release/angular-ui-router.min.js', included: false}, {pattern: 'js_components/angular-ui-utils/ui-utils.js', included: false}, {pattern: 'js/test/test-app.js', watched: true, included: false}, {pattern: 'js/app/model/pressrelease.js', watched: true, included: false}, {pattern: 'js/test/model/pressreleasemodelspec.js', watched: true, included: false}, 'js_components/requirejs/require.js', 'js/test/test-main.js' ], exclude: [], plugins: [ 'karma-jasmine', 'karma-phantomjs-launcher', 'karma-chrome-launcher', 'karma-requirejs' ], frameworks: ['jasmine', 'requirejs'], junitreporter: { outputfile: 'karma-test-results.xml', suite: '' }, port: 9876, runnerport: 9100, browsers: ['phantomjs', 'chrome'], autowatch: true, preprocessors: { 'template/**/*.html': ['html2js'] }, nghtml2jspreprocessor: { // strip file path stripprefix: 'web', modulename: 'templates' }, loglevel : config.log_info }) }; anyone has ideas? we're following example, we're not finding answer: https://github.com/marcoslin/angularamd
thanks
i solved removing angularamd unit tests. created bridge redirects app.register.method app.method app angular module.
define([ 'angularmocks', 'angular' ], function () { 'use strict'; var myapp = angular.module('spr', []); myapp.register = {}; var enhancemodule = function (method) { var register = myapp.register; register[method] = angular.bind(myapp, myapp[method]); }; angular.foreach([ 'controller', 'directive', 'filter', 'factory', 'service', 'constant', 'value', 'animation'] , enhancemodule); console.info('enhanced angular.module'); return angular.module('spr'); }); this test:
define(['angularmocks', 'app', 'js/app/model/pressrelease'], function (mocks) { describe('press release model', function () { var service; beforeeach(mocks.module('spr')); beforeeach(mocks.inject(function (pressrelease) { service = pressrelease; })); it('should something', function () { var res = service.servicecall(); expect(res).tobe(1); }); }); });
Comments
Post a Comment