1

尝试单元测试Angular(Ionic)1应用程序时使用angular.mock.inject(...)函数会抛出以下错误。奇怪的是,没有特定的错误信息,特别难以调试。无论我尝试什么,它似乎总是在没有任何消息的情况下抛出相同的非描述性错误。Angular Mock Inject在使用Karma和Jasmine时没有消息抛出错误

PhantomJS 2.1.1 (Linux 0.0.0) LoginController should pass FAILED 
    bower_components/angular/angular.js:4527:53 
    [email protected]_components/angular/angular.js:321:24 
    [email protected]_components/angular/angular.js:4487:12 
    [email protected]_components/angular/angular.js:4409:30 
    [email protected]_components/angular-mocks/angular-mocks.js:3160:60 
    [email protected]://localhost:9876/context.js:151:17 

删除对angular.mock.inject()的呼叫允许测试通过。

这里是有问题的测试:

describe('LoginController', function() { 

    var scope; 
    var controller; 

    beforeEach(angular.mock.module('mCommonJobs')); 
    beforeEach(angular.mock.inject(function($rootScope, $controller) { 
     scope = $rootScope.$new(); 
     controller = $controller('LoginController', { 
      $scope: scope 
     }); 
    })); 

    it('should pass', function() { 
    expect(true).toEqual(true); 
    }); 

}); 

我的凉亭依赖关系:

"dependencies": { 
    "angular-resource": "#1.5.0", 
    "ionic": "driftyco/ionic-bower#1.3.2", 
    "ngCordova": "^0.1.27-alpha", 
    "ng-cordova-oauth": "^0.3.0", 
    "ngstorage": "^0.3.11", 
    "angular-mocks": "^1.5.2" 
    }, 
    "resolutions": { 
    "angular": "~1.5.x" 
    } 

而且文件噶测试配置设置:

files: [ 
    //Angular source 
    'bower_components/angular/angular.js', 
    'bower_components/angular-animate/angular-animate.js', 
    'bower_components/angular-mocks/angular-mocks.js', 
    'bower_components/angular-resource/angular-resource.js', 
    'bower_components/angular-sanitize/angular-sanitize.js', 
    'bower_components/angular-ui-router/release/angular-ui-router.js', 
    'bower_components/ionic/js/ionic.bundle.js', 
    'bower_components/ng-cordova-oauth/dist/ng-cordova-oauth.js', 
    'bower_components/ngCordova/dist/ng-cordova.js', 
    'bower_components/ngCordova/dist/ng-cordova-mocks.js', 
    'bower_components/ngstorage/ngStorage.js', 
    //App code 
    'app/**/*.module.js', 
    'app/**/*.js', 
    'app/*.js', 
    //Test files 
    'test/**/*.test.js' 
], 
+0

你'角mocks.js'版本应该是完全一样你的'angular.js'版本。你的bower'resolution' config强制Angular的版本是'1.5.x' – Phil

+0

@Phil我把'angular-mocks'的版本改成了'^ 1.5.2'。同样的错误。我会更新这个问题。 – LanceLafontaine

+0

你是否重新运行'bower install'? – Phil

回答

1

这个问题被解决不包括files业务配置中的所有ionic.bundle.js,但通过指定包括其部件。

我也明确强制所有版本的角度相关的依赖是相同的版本(特别感谢Phil在评论。)。


最后,我bower.json有:

"dependencies": { 
    "angular-resource": "1.5.2", 
    "ionic": "driftyco/ionic-bower#1.3.2", 
    "ngCordova": "^0.1.27-alpha", 
    "ng-cordova-oauth": "^0.3.0", 
    "ngstorage": "^0.3.11", 
    "angular-mocks": "1.5.2" 
    }, 

和我的人缘配置看起来像:

files: [ 
    //Angular source 
    'bower_components/angular/angular.js', 
    'bower_components/angular-animate/angular-animate.js', 
    'bower_components/angular-mocks/angular-mocks.js', 
    'bower_components/angular-resource/angular-resource.js', 
    'bower_components/angular-sanitize/angular-sanitize.js', 
    'bower_components/angular-ui-router/release/angular-ui-router.js', 
    'bower_components/ionic/js/ionic.js', 
    'bower_components/ionic/js/ionic-angular.js', 
    'bower_components/ng-cordova-oauth/dist/ng-cordova-oauth.js', 
    'bower_components/ngCordova/dist/ng-cordova.js', 
    'bower_components/ngCordova/dist/ng-cordova-mocks.js', 
    'bower_components/ngstorage/ngStorage.js', 
    //App code 
    'app/**/*.module.js', 
    'app/**/*.js', 
    'app/*.js', 
    //Test files 
    'test/**/*.test.js' 
], 
相关问题