我目前正在开发一个非常大的模块化网络应用程序。使用AngularJS 1.x实现前端的位置。该项目大约有2年的历史,在开发过程中从未进行任何单元测试。现在需要为至少85%的Angular代码库添加单元测试。普遍的共识似乎是:"使用Jasmine / Karma或Mocha / Chai / Sinon"用于单元测试。
在查看通常的测试库后,我的担忧是一般需要为数据模拟和单元测试投入的工作量。它似乎过度,几乎与重新开发应用程序一样糟糕。最近,我还阅读了一些关于使用像Jasmine这样的复杂测试库进行单元测试的一般开销的文章(参见:https://medium.com/javascript-scene/why-i-use-tape-instead-of-mocha-so-should-you-6aa105d8eaf4#.1bzhv0q1f)
关于使用Tape JS进行测试的部分让我想知道是否可以在Angular 1.x中轻松完成。我对单元测试非常陌生,想知道是否有人使用带有Angular 1.x的Tape进行单元测试?这可能吗?
关于Tape的优缺点/经验以及Angular中的一般单元测试的想法,将不胜感激。
谢谢。
答案 0 :(得分:0)
跟进我的评论。
我认为每个人都使用Jasmine的原因是他们希望通过AngularJS界面测试他们的代码,这需要一个测试工具。
例如 - 假设您正在为组件编写测试。您将必须引导组件的angular.module。您还必须通过$ componentController创建组件控制器的实例。如果控制器需要任何依赖关系,那么你必须确保这些依赖关系也有自己的angular.module引导。
Jasmine做的很棒。
但是,Jasmine很快就会变得笨拙。它介绍了各种全局变量。 BeforeEach涉及大量重复。为了运行你的测试,你可能不得不使用Karma,这需要很多依赖并且非常慢。
我认为你可以跳过所有这些并且只是使用TapeJS,如果你可以将你的代码测试为普通的旧javascript。我认为这种方法适用于单元测试 - 但对于e2e测试,你应该深入研究茉莉花/量角器。
例如,我的AngularJS应用程序是使用类语法在Typescript中编写的。每个组件控制器和服务都是一个也被导出的打字稿类。因此,要使用TypeJS进行测试,您所要做的就是导入typescript类,创建它的实例,然后瞧。您现在可以访问所有方法(假设它们都是公共的),并且您可以测试输入/输出是否按预期工作。
这应该适用于AngularJS 1.5+,但是如果你的应用程序有很多指令,我不确定它是如何工作的。
我希望这会有所帮助。花费数天时间试图让测试跑步者工作是最糟糕的。
了解更多:
https://ponyfoo.com/articles/testing-javascript-modules-with-tape