【问题标题】:How to write a unit test for app.run in angularjs?如何在 angularjs 中为 app.run 编写单元测试?
【发布时间】:2015-02-17 09:02:38
【问题描述】:

我的app.run方法如下图。

 app.run(['urlconfigservice',
        function (urlconfigservice) {            
            urlconfigservice.loadurlconfiguration();
        }
      ]);

我的 urlconfigservice 如下图:读取 urlconfig.json 文件并将结果存储在 urlconfiguration 中。

define([
    'angular'
], function (angular) {
    'use strict';
    return angular.module('urlconfigservice', [])
      .factory('urlconfigservice', [ //
            '$rootScope', '$http',
    function ($rootScope, $http) {        
        return {            
            loadurlconfiguration: function () {                
                    $http.get('urlconfig.json').success(function (data) {                        
                        $rootScope.urlconfiguration = data;
                    });                
            }
        };
    }
      ])

    ;
});

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    正如 angular 文档所述,模块的运行块很难测试,最好不要完成。像您一样,它应该只使用逻辑所在的其他服务。

    AngularJS 文档:

    Run 块是 Angular 中最接近 main 方法的东西。运行块是需要运行以启动应用程序的代码。它在所有服务都配置好并创建注入器后执行。运行块通常包含难以进行单元测试的代码,因此应在独立模块中声明,以便在单元测试中可以忽略它们。

    但是,您可以像 other post 中关于测试运行块的描述那样测试工厂是否被调用

    【讨论】:

    • 谢谢你 Ricconnect。但我可以知道,如何模拟 run 方法。因为我正在编写其他控制器的单元测试。它显示意外请求:获取 urlconfig.json。预计不再有请求。
    • 您能否使用遇到此问题的单元测试代码更新您的问题。使用 loadConfiguration,您将发送获取配置的异步请求。运行单元测试时,很有可能加载了 configuration.json。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    相关资源
    最近更新 更多