首页 > 解决方案 > 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);
    });       
});

标签: javascriptangularjsjasminejestjs

解决方案


这看起来像应用程序是用 TypeScript 编写的,但测试是用 JavaScript 编写的。

当您运行测试(作为 JavaScript)并需要使用 TypeScript 编写的部分时,JavaScript 解释器无法解析它们。

将 TypeScript 编译为 JavaScript,并在测试中包含生成的文件 (.js),而不是 TypeScript 源文件 ( .ts)


推荐阅读