Подтвердить что ты не робот

Доступ к $scope из файла unit test при использовании синтаксиса vm "ControllerAs" от AngularJS HotTowel

См. здесь, например: http://www.johnpapa.net/angularjss-controller-as-and-the-vm-variable/

Как следует из названия, я следую этому руководству [http://tech.pro/tutorial/1473/getting-started-with-angularjs-unit-testing], чтобы настроить модульное тестирование, и все это отлично ИСКЛЮЧАЕТ для факта я похоже, не может обращаться к переменной vm как к моей области $.

dashboard.js

var controllerId = 'dashboard';
angular.module('app')
    .controller(controllerId, ['common', 'datacontext', dashboard]);


function dashboard(common, datacontext) {
    var getLogFn = common.logger.getLogFn;
    var log = getLogFn(controllerId);

    var vm = this;      
    vm.title = 'Dashboard';

dashboard.Spec.js

describe("app module", function() {
    beforeEach(module("app"));

    describe("dashboard", function() {
        var scope,
            controller;

        beforeEach(inject(function($rootScope, $controller) {
            scope = $rootScope.$new();
            controller = $controller;
        }));

        it("should assign Dashboard as title", function() {
            controller("dashboard", {
                $scope: scope
            });
            expect(scope.title).toBe("Dashboard");
        });
    });
});

Что я пробовал: он работает (тест проходит), когда я называю '$ scope' непосредственно в зависимостях контроллеров и устанавливаю для него свойство title. Тем не менее, я хотел бы сохранить шаблон как есть.

Я также пробовал переходить в $scope непосредственно в зависимости и называть параметр контроллера как "vm"...

Отказоустойчивое сообщение Karmas: Ожидаемый undefined как "Личный кабинет"

оцените любую помощь!

4b9b3361

Ответ 1

Ah, теперь очевидно... Я могу получить доступ к переменной vm, сделав ссылку на контроллер, созданный в тесте:

 it("should assign Dashboard as title", function () {
       var vm = controller("dashboard", { $scope: scope });
       expect(vm.title).toBe("Dashboard");
    });

Ответ 2

вы также можете сделать это:

it("should assign Dashboard as title", function () {
    var controller = controller("dashboard as vm", { $scope: scope });

    expect(scope.vm.title).toBe("Dashboard");
});