使用typescript

时间:2017-08-27 16:05:32

标签: angularjs unit-testing typescript angular-mock angular-module

我正面临这个问题,我有两个相互依赖的角度1.5模块,这是由angularjs很好,但当我使用打字稿& webpack,我得到循环的typescript-module依赖项,并且模块没有正确加载。 我在模块之间的角度服务中没有循环依赖关系,因此根据角度模块相互应该没有问题。

//first.module.ts
import {SecondModule} from "second.module.ts";
let FirstModule = angular.module("firstModule",[SecondModule.name]);
export {FirstModule};

//second.module.ts
import {FirstModule} from "first.module.ts";
let SecondModule = angular.module("secondModule",[FirstModule.name]);
export {SecondModule};

在上面的示例中,由于FirstModule尚未导出,因此我在最后一行得到“未定义的未定义”名称。

我在网上看到的一个解决方案就是不将SecondModule定义为FirstModule的依赖项,但是将它们作为父模块(我的主app模块)的依赖项,问题是我无法使用ngMock模拟FirstModule进行单元测试 - 因为它没有将SecondModule注册为依赖子模块。所以我必须嘲笑我的整个主要应用程序,这是一个大而混乱。

我看到的其他解决方案是使用typescript类包装角度模块,并将角度模块创建放在此类的构造函数中,这样我就可以控制何时创建模块,但是我必须重构我的整个应用程序创建那些包装模块的对象,我不知道这将如何影响使用ngMock编写单元测试。

这种情况有没有最佳做法?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以将字符串常量导出为文件

中的第一个内容
//first.module.ts
export const prefixFirstModule = "prefixFirstModule";
import {prefixSecondModule} from "second.module";
export const FirstModule = angular.module(prefixFirstModule,[prefixSecondModule]);

//second.module.ts
export const prefixSecondModule = "prefixSecondModule";
import {prefixFirstModule} from "first.module";
export const SecondModule = angular.module(prefixSecondModule,[prefixFirstModule]);

这有点痛苦,但据我所知,这是解决问题的唯一方法,对你当前的模块结构提供相同的树摇动等支持。