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

Testing Module,controllers and Factory Service using Jasmine-Karma

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

来加载模块

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

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

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

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

是否有特定的方法来监视具有参数的方法,或者无论该方法有多少参数,使用带有方法名称的 createSpy() 的传统方法都可以达到目的??

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

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

Q.1 - 如果我的模块有 100 个工厂服务,那么是必须模拟 beforeEach 块中的所有服务还是只模拟服务我要为哪个编写​​单元测试用例?

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

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

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

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

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

Q.4 - 是否有特定的方法来监视具有参数的方法,或者使用带有方法名称的 createSpy() 的传统方法无论如何都可以达到目的该方法有多少个参数??

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

我不太了解如何为指令编写单元测试用例,也许其他人可以帮助您。

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