【问题标题】:Testing an AngularJs service in a module called 'MyApp.services'在名为“MyApp.services”的模块中测试 AngularJs 服务
【发布时间】:2013-09-21 18:14:35
【问题描述】:

AngularJS 书有一个名为“guthub”的完整示例应用程序。在该应用程序中定义了一个名为“guthub.services”的模块中的各种服务。但是,没有示例说明如何正确测试与“guthub”不同的模块中的服务。在我的应用程序中,应用程序模块的定义如下:

angular.module('SSAApp', ['SSAApp.services']);

我可以像这样正确访问服务模块:

var services = angular.module('SSAApp.services');

我的服务在我运行应用程序时工作。但是当我尝试通过 Karma 运行测试时,它失败并出现错误: 未捕获的错误:没有模块:SSAApp.services

如何正确编写测试函数以便可以找到“SSAApp.services”?我相信 Yeoman 生成的代码假定所有内容都卡在一个模块下。

【问题讨论】:

    标签: angularjs karma-runner


    【解决方案1】:

    使你正在运行:

    beforeEach(module('SSAApp.services'));
    beforeEach(module('SSAApp'));
    

    在您的测试的第一个 describe 块中。我不记得你是否需要运行第一个,但你确实需要运行第二个。还要记住在用于测试的主要 index.html 中包含 SSAApp.services 的脚本。我确实花了时间调试类似的问题,并意识到我忘了包含一个文件。

    【讨论】:

    • 我想我需要重申我的问题。
    • 您只需要在应用程序的主模块上提供一个 beforeEach() 即可。我的主要问题是我用来为服务创建存根的 yeoman 工具。假设我这样做: yo angular:service myService 服务代码将包含服务调用“Myservice”的定义(注意大小写的变化)。但是,测试代码随后将对名为 myService' 的变量调用 inject(),这是不正确的。据我所知,它应该是“Myservice”。当我将其更改为它时,它似乎可以工作。我的服务实例被创建,我可以在测试代码中使用它。
    • 那么您是否也尝试自动生成测试?重命名服务变量有什么问题吗?
    • 我的问题是,从一开始,用于创建服务的 yeoman 工具就不正确了。它使注入项目的大小写错误,因此测试存根被破坏。我希望它创建的简单测试存根(它只测试服务的构造函数被调用并返回一个对象)会通过。
    猜你喜欢
    • 2013-04-07
    • 1970-01-01
    • 2023-04-01
    • 2018-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    相关资源
    最近更新 更多