javascript - AngularJS单元测试时无法加载模块
问题描述
我正在为我的 angularJS 1.4.x 应用程序服务和控制器编写单元测试,问题是我们所有的控制器和服务都在模块内部声明,如下所示,即“MyApp”
module MyApp {
'user strict';
export class MyService {
public static $inject = [
'$http',
'$rootScope',
'library'
];
constructor(private $rootScope:any,
private $http:ng.IHttpService,
private library:lib.Library) {}
// some methods...
}
}
但是当我尝试在我的 test.js 文件中要求这个文件时,它给出了以下错误
SyntaxError: Unexpected token, expected ";" (1:7)
这是我的测试文件
require('../../../node_modules/angular/angular.min.js');
require('../../../node_modules/angular-mocks/angular-mocks.js');
require('../ts/MyService.ts');
describe('myService testing', function(){
beforeEach(
angular.mock.module('app')
);
var ser;
beforeEach(inject(function(myService) {
ser = myService;
}));
it('1 + 1 should equal 2', function(){
var actual = ser.addTwoNumbers(1,1);
expect(actual).toEqual(2);
});
});
解决方案
这看起来像应用程序是用 TypeScript 编写的,但测试是用 JavaScript 编写的。
当您运行测试(作为 JavaScript)并需要使用 TypeScript 编写的部分时,JavaScript 解释器无法解析它们。
将 TypeScript 编译为 JavaScript,并在测试中包含生成的文件 (.js),而不是 TypeScript 源文件 ( .ts)