Angularjs тестирование - инициализация контроллера с привязкой - PullRequest
0 голосов
/ 31 мая 2018

У меня есть такой контроллер.

app.controller('MyCtrl', function() {
let ctrl = this;

if (ctrl.contract) {
    ctrl.contract.typeId = ctrl.contract.type.id;
} else {
    ctrl.contract = {
        name: 'test'
    };
}
....

Он может иметь или не иметь contract привязанного к нему.
Проблема возникает в моем тесте

describe('MyCtrl', () => {
let ctrl;

beforeEach(angular.mock.module('mymodule'));
beforeEach(angular.mock.module('ui.router'));

describe('Update contract', () => {
    beforeEach(inject((_$controller_) => {
        ctrl = _$controller_('MyCtrl', {}, {
            contract: {
                type: {
                    id: 2
                }
            }
        });
    }));

    it('should set the contract.typeId to be the id of the type of the contract that was sent in', () => {
        expect(ctrl.contract.typeId).toBe(ctrl.contract.type.id);
    });
})
});

Я передаю объект контракта, что означает, что он должен войти в первый if в моем контроллере и установить typeId.Но это всегда входит в else независимо от того, что я делаю.

Как я могу убедиться, что контроллер не запускается или не запускается до того, как все мои переменные будут привязаны к нему?

1 Ответ

0 голосов
/ 31 мая 2018

Я считаю, что проблема в том, что вам нужно напрямую получить службу $ controller, а также передать действительную область (не пустой объект)

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

    ctrl = $controller('MyCtrl', {
        $scope: scope,
    }, {
        contract: {
            type: {
                id: 2
            }
        }
    });
}));
...