2016-07-04 93 views
0

我正在为使用Karma和Jasmine在Angular 1和JSPM中编写的应用程序编写单元测试。使用Karma/Jasmine/JSPM单元测试角度服务

这里是我的噶配置(JSPM部分):

jspm: { 
    meta: { 
     'jspm_packages/github/angular/angular.js': { 
      format: 'global', 
      exports: 'angular' 
     }, 
     'jspm_packages/github/angular/angular-mocks.js': { 
      format: 'global', 
      deps: 'angular' 
     } 
    }, 
    loadFiles: [ 
     'test/**/*.js' 
    ], 
    serveFiles: [ 
     'app/**/*.js' 
    ] 
}, 

首先,我想测试自定义的角度服务:

// imports 

class Game { 

    constructor($rootScope, $http, $timeout, $translate, $location) { 

     // ... 

     this.$rootScope.game = this; 

    } 

} 

这里是我的测试文件:

import { module, inject } from 'angular-mocks'; 

describe('this is a test', function() { 

    beforeEach(module('module-name')); 

    var game; 

    beforeEach(inject(function(_game_) { 
     game = new _game_; 
    })); 

    it('should be defined', function() { 
     expect(game).toBeDefined(); 
    }); 
}); 

主要问题是我一直有这个错误。来自angular-mocks的inject函数似乎不起作用,因为我没有定义我的变量game,但它应该是。

PhantomJS 2.1.1 (Windows 8 0.0.0) should be defined FAILED 
    forEach 
    loadModules 
    createInjector 
    workFn 
    {path}/node_modules/karma-jspm/src/adapter.js:61:24 
    [email protected]:/{path}/jspm_packages/system-polyfills.src.js:1188:34 
    [email protected]:/{path}/jspm_packages/system-polyfills.src.js:1147:18 
    [email protected]:/{path}/jspm_packages/system-polyfills.src.js:935:20 
    [email protected]:/{path}/jspm_packages/system-polyfills.src.js:826:17 
    [email protected]:/{path}/jspm_packages/system-polyfills.src.js:102:22 
    [email protected]:/{path}/jspm_packages/system-polyfills.src.js:67:15 
    Expected undefined to be defined. 
    D:/{path}/node_modules/karma-jspm/src/adapter.js:61:24 
    [email protected]:/{path}/jspm_packages/system-polyfills.src.js:1188:34 
    [email protected]:/{path}/jspm_packages/system-polyfills.src.js:1147:18 
    [email protected]:/{path}/jspm_packages/system-polyfills.src.js:935:20 
    [email protected]:/{path}/jspm_packages/system-polyfills.src.js:826:17 
    [email protected]:/{path}/jspm_packages/system-polyfills.src.js:102:22 
    [email protected]:/{path}/jspm_packages/system-polyfills.src.js:67:15 

所以,我不明白为什么它不起作用。任何线索?

+0

这个任何解决方案?我也面临同样的问题 –

回答

0

也许太晚了现在,但尝试没有新的关键字:

beforeEach(inject(function(_game_) { 
    game = _game_; 
}));