Angularjs测试 - 使用绑定初始化控制器

时间:2018-05-31 12:24:54

标签: javascript angularjs jasmine karma-runner

我有一个像这样的控制器。

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 :(得分:0)

我认为问题在于您需要直接获取$ controller服务并传递有效范围(不是空对象)

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

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