【问题标题】:Testing Module,controllers and Factory Service using Jasmine-Karma使用 Jasmine-Karma 测试模块、控制器和工厂服务
【发布时间】:2016-10-10 21:22:07
【问题描述】:

我是在 jasmine 中编写单元测试用例的新手..我对在单元测试用例中加载模块有疑问.. 我的带有 AngularJS 的完整 REST 应用程序具有相同的模块名称但具有不同的控制器、指令和工厂服务的场景。如果我只是通过添加来加载模块

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

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

如果正在为其编写单元测试用例的工厂服务依赖于其他服务,那么这些服务是否也应该在 beforeEach() 块中被模拟,并监视其所有依赖的服务方法??

如果要模拟的工厂服务存在于控制器中,那么应该先模拟控制器然后模拟工厂服务???

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

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

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

【问题讨论】:

  • 有人能解开我的疑虑吗

标签: jasmine karma-jasmine


【解决方案1】:

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

Ans. - 不。只需模拟服务和spyOn 服务的方法,您的控制器依赖它。

问。 2 - 如果正在为其编写单元测试用例的工厂服务依赖于其他服务,是否也应该在 beforeEach() 块中模拟这些服务并监视其所有依赖的服务方法??

回答。 - 是的。这些服务应该被嘲笑。但是只有你的工厂所依赖的那些服务的方法应该被监视。无需监视该服务中的所有方法。

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

Ans. - 没有完全理解您所说的控制器中存在工厂服务的意思。这是否意味着它作为依赖项存在于控制器中?或者这是否意味着您已将.factory/.service 方法链接到.controller 方法。无论如何,如果您正在编写服务测试用例,则无需模拟控制器。但是,如果您正在为控制器编写测试用例,那么您将不得不模拟该服务并监视它的依赖方法。

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

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

我对编写指令的单元测试用例了解不多,也许其他人可以帮助你。

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

【讨论】:

  • 非常感谢 Q4..更具体地说..这是我提到的...控制器中的工厂服务 angular.module('app').controller('Controller Name' ).factory('工厂服务名',function()......在这种情况下我应该模拟控制器还是直接模拟服务..
  • 在这种情况下,您必须分别为控制器和工厂编写测试用例。
  • 因为我使用 angular.module('app').controller ........这意味着我正在为现有模块创建一个控制器.....但是模块名称与在 15 个地方使用相同的语法..在某些文件中,它取决于其他用户定义的模块....当我在 karma conf 文件中引用所有这些 js 文件并创建一个规范(它的测试用例)..并模拟module as module('app') in beforeEach 块....我应该模拟所有其他模块,而 module 'app' 依赖于或只是在我的所有规范中包含一行作为 angular.module('app')
  • 您是在为控制器或服务编写测试用例吗?
  • 对于服务....angular.module('app') .factory('deepak', deepak); deepak.$inject = ['$rootScope', '$http', '$q', 'service1', 'service2''];功能 deepak($rootScope, $http, $q, service1, service2) {
猜你喜欢
  • 2017-02-24
  • 2014-09-20
  • 1970-01-01
  • 2017-06-03
  • 2013-09-29
  • 1970-01-01
  • 2014-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多