单元测试AngularJS控制器,同时遵循最佳实践

我们正在按照这里概述的一些最佳实践指南构建AngularJS应用程序。

我特别感兴趣的是测试一个非常简单的控制器来启动和运行业力。

控制器代码是:

angular.module('ttn').controller('Login', Login);

function Login(){

    var login = this;
    login.title = 'foo bar content here etc';

}

规范代码是:

describe('Controller: Login', function () {

    beforeEach(module('ttn'));

    var scope, controller;

    beforeEach(inject(function ($controller, $rootScope) {

        scope = $rootScope.$new();

        controller = $controller('Login', {
            $scope: scope
        });

        scope.$digest();

    }));

    it('should define a title', function () {
        expect(scope.title).toBeDefined();
    });

});

这会失败,并期待undefined被定义。

如果我将控制器更改为:

angular.module('ttn').controller('Login', Login);

function Login($scope){

    $scope.title = 'foo bar whatsit jibber';

}

测试然后按预期通过。 我不确定如何引用以上述链接中列出的方式编写的控制器以通过测试。


由于您的控制器不使用$ scope,因此您不应该注入它并在测试中使用它。 相反,您应该检查控制器上的标题:

describe('Controller: Login', function () {

    beforeEach(module('ttn'));

    var controller;

    beforeEach(inject(function ($controller) {

        controller = $controller('Login', {});

    }));

    it('should define a title', function () {
        expect(controller.title).toBeDefined();
    });

});

Plunkr

链接地址: http://www.djcxy.com/p/39119.html

上一篇: Unit testing AngularJS Controller whilst following best practice

下一篇: AngularJS unit test directory structure Best Practices