【问题标题】:Angular unit tests for module run method模块运行方法的角度单元测试
【发布时间】:2015-01-06 19:49:17
【问题描述】:

在我们的项目中,我们使用 requirejs 和 angularjs。我们有一个主应用程序模块(app)和所有服务模块(app-services),所有控制器模块(app-controllers),所有过滤器模块(app-filters)。模块 app-controllers、app-services 等作为依赖项添加到主 app 模块中。

主应用模块

var mainAppModule = angular.module('app', [
        'ngResource',
        'ngSanitize',
        'app.controllers',
        'app.directives',
        'app.services',
        'app.filters',
        'app.routes'
    ]);

mainAppModule.run(['$location', '$rootScope', function ($location, $rootScope) {
    $rootScope.sayHello = function(name) {
        console.log("Hello" + name);
    }
}]);

如何为 mainAppModule.run 方法编写 Karma/Jasmine 测试?

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    通常,逻辑应保留在 run 方法之外(例如,包含在控制器、服务、指令、过滤器等中)。但是,您可以按如下方式测试您的运行方法。使用茉莉语法:

    //Updating this method to use $log for DI
    mainAppModule.run(['$location', '$rootScope', '$log', function ($location, $rootScope, $log) {
        $rootScope.sayHello = function(name) {
            $log.info("Hello" + name);
        }
    }]);
    //---------------------------
    
    //Jasmine test
    describe("app run", function () {
        var $rootScope;
        var $log;
    
        beforeEach(module("app"));
        beforeEach(inject(function (_$rootScope_, _$log_) {
            $rootScope = _$rootScope_;
            $log = _$log_;
        }));
    
        it("should expose sayHello function to $rootScope", function () {
            expect(angular.isFunction($rootScope.sayHello)).toBe(true);
        });
    
        describe("sayHello function", function () {
            it("should log 'Hello name'", function () {
                spyOn($log, "info");
                $rootScope.sayHello("test");
    
                expect($log.info).toHaveBeenCalledWith("Hello test");
            });
        });
    });
    

    【讨论】:

    • 谢谢。这种方法对我有用。接受答案。
    【解决方案2】:

    我相信最好的方法是简单地使用“运行”方法执行的基于状态的验证。对于您提供的特定示例,将 $rootScope 注入测试并验证它是否具有名为“sayHello”的函数类型的属性。

    当您从测试中调用 angular.mock.module 函数时,Jasmine 应自动调用 IIRC 您的应用程序运行方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-05
      • 2019-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多