使用Jasmine-Karma测试模块,控制器和工厂服务

时间:2016-06-10 02:59:13

标签: jasmine karma-jasmine

我在茉莉花中编写单元测试用例。我对在单元测试用例中加载模块有疑问。 我使用AngularJS的完整REST应用程序具有相同的模块名称但具有不同的控制器,指令和工厂服务的情况。如果我只是通过添加

来加载模块

module("module name") ----这是否意味着我还要加载所有控制器,工厂服务和指令?

如果我的模块有100个工厂服务,那么是否必须模拟BeforeEach块中的所有服务,或者只是模拟为其编写单元测试用例的服务?

如果编写单元测试用例的Factory服务依赖于其他服务,那么这些服务是否也应该在beforeEach()块中使用其所有相关服务方法进行模拟?

如果要进行模拟的工厂服务存在于控制器内,则应首先模拟控制器,然后是工厂服务???

是否存在一种特定的方法来监视具有参数的方法,或者使用带有方法名称的createSpy()的传统方式无论该方法有多少参数都可以解决问题?

如果指令有一个指向HTML文件的模板URL,那么在加载模块时也会加载吗?

如果指令需要HTML文件作为模板URL ..如何模拟模板URL?防止它试图输出HTML页面

1 个答案:

答案 0 :(得分:1)

Q.1 - 如果我的模块有100个工厂服务,那么是否必须模拟beforeEach块中的所有服务,或者只是为了模拟正在写入的服务单元测试用例?

Ans。 - 不。只是嘲笑服务和spyOn服务的方法,你的控制器依赖。

问。 2 - 如果编写单元测试用例的工厂服务依赖于其他服务,那么这些服务是否也应该在beforeEach()块中使用其所有相关服务方法进行模拟?

Ans。 - 是的。那些服务应该被嘲笑。但是,只有你的工厂所依赖的那些服务的方法才应该被监视。没有必要监视该服务中的所有方法。

Q.3 - 如果要进行模拟的工厂服务存在于控制器内,那么应该首先模拟控制器,然后是工厂服务???

答案 - 在控制器中出现的工厂服务并不完全符合您的意思。这是否意味着它作为依赖项存在于控制器中?或者它是否意味着您已将.factory / .service方法链接到.controller方法。在任何情况下,如果您正在为服务编写测试用例,则无需模拟控制器。但是如果你正在为控制器编写测试用例,那么你将不得不模拟服务并监视它依赖的方法。

Q.4 - 是否有一种特定的方法来监视具有参数的方法,或者使用带有方法名称的createSpy()的传统方式将无论方法名称有多少参数都可以具有??

Ans。 - 据我所知,方法的参数数量与它的间谍无关。但是,如果您使用callFake,则必须为方法提供与实际方法接受的参数数量相同的参数。

我对为指令编写单元测试用例知之甚少,也许其他人可以帮助你。

希望这能回答你的一些问题。